【问题标题】:Printing plain text with javax.print API使用 javax.print API 打印纯文本
【发布时间】:2011-03-10 15:37:18
【问题描述】:

我想将纯文本(可能是 cp1252 或任何 Windows 使用的)打印到特定的打印服务。听起来很容易,对吧?但成功似乎很大程度上取决于您使用的打印机类型。

我有三种不同的打印机可用。一种是 HP LaserJet(普通打印机),一种是 Free PDF(虚拟 PDF 打印机),一种是 Tobit Faxware(一种虚拟传真服务 - 这是我想要打印的内容)。

根据支持的文档风格,没有一个提供“文本/纯文本”或任何其他“文本”格式。

当我使用DocFlavor.URL.AUTOSENSE 打印时,HP 打印机将正确打印文本,但其他两个将静默失败。由于不支持“文本”DocFlavors,除了“autosense”之外,我无法再给打印机提供任何提示。

当使用 Windows 的记事本打印文件时,它适用于所有三台打印机。区别似乎是我正在打印“RAW”数据,而记事本使用“NT EMF 1.008”。

我有什么方法可以使用 java PrintService 让它工作吗?

【问题讨论】:

    标签: java printing


    【解决方案1】:

    我有什么方法可以使用 java PrintService 让它工作吗?

    当然。这是 Oracle 在Java Print Service 上的文章。

    我使用的是较旧的 AWT 打印服务。使用 AWT 打印服务,您必须将文本转换为图像,然后打印图像。

    【讨论】:

    • 图像无法工作,因为传真打印驱动程序会扫描输出以查找关键字。
    • 实际上...我注意到有时使用 drawString 将文本“绘制”到 PrintJob 会产生您可以标记的文本(使用 FreePDF 作为打印机)。但它不能始终如一地工作,因为大多数时候组件会被 PrintJob 分割成图像切片,然后就没有文本了。我还没有弄清楚什么时候使用哪种方法。
    【解决方案2】:

    当使用 Windows 的记事本 [NT EMF 1.008] [...] 时,它适用于所有三台打印机

    FreeHEP 为 Java 提供 EMF 输出格式:http://java.freehep.org/,这是根据增强型元文件格式驱动程序创建的二进制文件。

    public void write(EMFOutputStream emf) throws IOException {
        emf.writePOINTL(pos);
        emf.writeDWORD(string.length());
        emf.writeDWORD(8 + 28 + 40); // TagHeader + ExtTextOutA + Text
        emf.writeDWORD(options);
        emf.writeRECTL(bounds);
        int pad = (string.length()) % 4;
        if (pad > 0)
            pad = 4 - pad;
        emf.writeDWORD(8 + 28 + 40 + string.length() + pad); // offset to
                                                             // character
                                                         // spacing array
        emf.writeBYTE(string.getBytes());
        for (int i = 0; i < pad; i++)
            emf.writeBYTE(0);
        for (int i = 0; i < string.length(); i++)
            emf.writeDWORD(widths[i]);
    }
    

    样本借自programcreek.com

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2012-12-28
      • 2016-01-20
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      相关资源
      最近更新 更多