我需要将报告从 Java 桌面应用程序打印到点阵打印机 (Epson LX-300 II)。报告由文本和一些图形组成。打印机通过 USB 连接,我使用 CUPS 进行打印。我正在使用 Printable 接口(Java 中相当标准)进行打印。
我的问题:
每种打印机分辨率(60x60、120x60、120x72)的文本打印质量都非常低。某些打印机驱动程序中似乎根本没有字体提示。字母看起来非常难看。我无法使用直接文本输出来移植(它看起来很棒),因为我还需要在同一页面上打印图形。
看来问题不在 Java 中,因为同一应用程序在 Windows 中打印高质量的文本和图形。另外,问题似乎不在 CUPS 系统中,因为 OpenOffice 或 Abiword 使用相同的字体打印相同的文本,质量非常好(比 Windows 差,但仍然不错)。
另外问题不在于字体:我尝试了 Windows 中的 Tahoma 字体,它的效果是一样的:在 java/linux 中打印时质量低。
问题不在于 X.Org 中的 BCI 提示,屏幕上的显示效果非常好。
当我将任何文档从 OpenOffice 导出为 PDF 并打印该 PDF 时,我得到了相同的效果 - 纸张上出现难看的无提示字体。如果从 Office 打印同一份文档,则一切正常。
我尝试了不同的 Linux(KUbuntu 10.04、Puppy 2、Puppy 4.3.1),并且在任何 Linux 上都得到了相同的效果。
也许问题出在 Ghostscript 中,我在 Puppy 上得到了 9.x 版本,但仍然一样。或者我也认为 CUPS 光栅化器(“rastertoepson”或“foomatic-rip”)可能存在问题。
这是输出示例(抱歉“移动”质量的照片):
我只是不知道发生了什么事,请帮助我。
--
附:我的最终解决方案是使用“ESCPrinter.java”开源类,为其添加根据 Epson 文档打印图像的功能。
你可以给setRenderingHint
尝试一下;将一些呼叫复制在一起以方便打字。
也许是TEXT_ANTIALIASING,但我不会排除其他的。
另一个想法是,在某个地方屏幕分辨率会缩放到打印分辨率;一个带有 DIY 打印功能的小型 Java 应用程序将显示这一点。
你没有做rotate
, 你是否? (只是看到照片)。
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
return Printable.PAGE_EXISTS;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)