无法在 Windows 7 中使用 Java 8 打印文本文件

2022-09-03 15:44:24

我已经创建了一个报表并将其导出为文本文件,以便在矩阵打印机中打印,但是,作业的结果是空白页。我在ubuntu中做了同样的事情,它打印正确。这是一个Java错误吗?

这是我为向您展示问题而做的一个示例代码:

public class PrintError extends Application {

    public static void main(String args[]) {
        launch(args);
    }

    public void start(Stage stage) throws PrintException {
        PrinterJob printerJob = PrinterJob.createPrinterJob();
        printerJob.showPrintDialog(stage);
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
        printRequestAttributeSet.add(new Copies(printerJob.getJobSettings().getCopies()));
        printRequestAttributeSet.add(new JobName("test", Locale.getDefault()));
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc mydoc = new SimpleDoc(ClassLoader.class.getResourceAsStream("/should-be-printed.txt"), flavor, null);
        DocPrintJob job = getPrintService(printerJob.getPrinter().getName()).createPrintJob();
        job.print(mydoc, printRequestAttributeSet);
    }

    private PrintService getPrintService(String name) {
        for (PrintService printService : java.awt.print.PrinterJob.lookupPrintServices()) {
            if (name.equalsIgnoreCase(printService.getName())) {
                return printService;
            }
        }
        return null;
    }
}

此示例是在 JavaFx 8 中创建的,在 Windows 7 的 Java build 1.8.0-b132 中运行。我还在github上创建了一个简单的项目。


答案 1

文档中

推荐的 DocFlavors

Java Print Service API 不定义任何强制支持的 DocFlavors。...

当您有实例时,您可以使用该方法来找出它支持哪些风格。PrintServicegetSupportedDocFlavors()

当您发现列表中没有一种类型时,使用它没有帮助,因为这仅仅意味着“最佳猜测”,并且不太可能猜测它不支持的类型,相反,数据更有可能被误解为它支持的格式之一。DocFlavor. INPUT_STREAM. TEXT_PLAIN_…AUTOSENSEPrintService

在我的Windows计算机上,没有一个提供的s支持打印明文...PrintService


答案 2

如果其他人遇到类似的问题(在Windows 7中打印空白,但在我的情况下在Windows 10中工作),但DocFlavor设置正确(即所选打印服务支持的一个)...

我能够通过将 JRE 从 32 位 8u101 更新为 64 位 8u121 来解决我的问题。


推荐