【问题标题】:Java printing - Enlarged printouts on a small number of printersJava 打印 - 在少量打印机上放大打印输出
【发布时间】:2013-05-01 22:15:00
【问题描述】:

在某些打印机上,无论出于何种原因,在通过 Java JVM (Java 7) 打印时,打印输出都会自动放大,看起来像是默认设置。这似乎与较旧的打印机有关,而且非常罕见,但不止一种打印机型号会发生这种情况。升级驱动程序也不能解决问题。

该软件使用JFreeReport(经典引擎)库,当使用该库导出为PDF时,一切都很棒。使用库的打印预览也是完美的。然而,当涉及到打印时,并且这仅适用于极少数打印机,打印输出会被放大。它们没有放大,但字体要大得多,而且间距不正确,因此它们相互重叠。

这些带有 JDK 6 的打印机似乎工作正常。看来,我仍在尝试隔离问题。我的想法是这些打印机可能无法正确支持 Java 7

更新:我找到了this thread which seems to indicate that there are some issues with JDK 7u21。我在发行说明中没有看到任何解决此问题的内容。另外这里是another example of the a similar bug report

更新 2:对于任何感兴趣的人,我写了一篇名为 Printing is Broken on Mac OS X with Java 7 的博客文章,讨论了这个问题,其中包含更多细节和我发现的内容。

【问题讨论】:

  • 现在我正在创建一个临时文件,然后调用“lp tempFile.pdf”,但这并不理想,因为它假定默认打印机是正确的。必须有一个解决方案。我不敢相信甲骨文和苹果已经离开这个主要的明显错误好几个月了。这对于很多应用程序来说都是至关重要的!!!

标签: java printing awt java-7 jfreereport


【解决方案1】:

很遗憾,这是known bug。虽然有一些解决方法(链接中提到的对称打印分辨率,转换为缓冲图像然后打印)我还不知道有任何解决方法。

【讨论】:

    【解决方案2】:

    显然没有解决办法。问题是 JVM 设置的字体属性被 Mac OS 忽略为reported in this bug reportthis bug report

    唯一的解决方法是创建一个临时文件,然后使用以下方法打印它:

    try
    {
        Process process = Runtime.getRuntime().exec(new String[]{"lp", tempFileFullPath});
        process.waitFor();
    } catch (Exception e) {
        // error handling
    }
    

    当然,这可以在线程中或通过 SwingUtils 触发,具体取决于您是否有 GUI 应用程序,但这是目前唯一可行的方法。

    【讨论】:

      【解决方案3】:

      这是一个已知错误 - 如果您不想使用 PDF 打印解决方法,可以查看此答案:

      https://stackoverflow.com/a/17345102/456837

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 2012-10-05
        • 2013-05-01
        相关资源
        最近更新 更多