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

Posted

技术标签:

【中文标题】无法在 Windows 7 中使用 Java 8 打印文本文件【英文标题】:Can't print text file using Java 8 in Windows 7 【发布时间】:2014-12-27 02:06:54 【问题描述】:

我创建了一个报告并将其导出为文本文件,以便在矩阵打印机中打印,但是,作业的结果是一个空白页。我在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创建了一个简单的项目

【问题讨论】:

您要使用哪些 PDF 打印机?另外,您能否发布一个生成的文本报告的示例以及 Ubuntu 创建的内容? JavaFX 有一个printing framework。由于您的应用程序是在 JavaFX 中创建的,我认为您应该尝试使用该框架。 显示如何使用打印框架的示例仅显示如何打印应用程序(节点)的内容。这个框架可以打印文件吗? 【参考方案1】:

来自documentation:

推荐的 DocFlavors

Java Print Service API 没有定义任何强制支持的 DocFlavor。 …

当你有一个PrintService 实例时,你可以使用getSupportedDocFlavors() 方法来找出它支持的风格。

当您发现列表中没有DocFlavor. INPUT_STREAM. TEXT_PLAIN_… 口味时,使用AUTOSENSE 无济于事,因为这仅表示“最佳猜测”,PrintService 不太可能猜测类型它不支持,相反,数据更有可能被误解为它支持的格式之一。

在我的 Windows 机器上,提供的 PrintServices 都不支持打印纯文本……

【讨论】:

我没有注意到windows的pdf打印机不能直接打印文本文件。【参考方案2】:

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

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

【讨论】:

以上是关于无法在 Windows 7 中使用 Java 8 打印文本文件的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Windows 10 中,Java Keyevent 不起作用..在 Windows 7 和 8 中它运行良好..我不知道为啥

在 Tomcat 6-Java 7/8 中运行 Tomcat 6-Java 6 WebApps

无法使用PhoneGap在Windows Phone 7中调用Ajax方法

无法使用 pacifist 在带有 Java 1.7.0.45 的 Mac OS X 10.6.8 上运行线程化的 java jar 文件

从 Java 6 升级到 Java 7/8 后,Apple 推送无法正常工作

如何在 Java 7 和 8 中找出字体文件路径