我想将纯文本(可能是cp1252或Windows正在使用的任何内容)打印到特定的打印服务。听起来很简单吧?但成功似乎在很大程度上取决于您正在使用的打印机类型。
我有三种不同的打印机。一个是HP LaserJet(普通打印机),一个是Free PDF(一个虚拟PDF打印机),一个是Tobit Faxware(虚拟传真服务 - 这就是我要打印到的)。
根据支持的doc flavor,none提供“text / plain”或任何其他“text”格式。
当我使用DocFlavor.URL.AUTOSENSE
打印时,HP打印机将正确打印文本,但其他两个将无声地失败。由于不支持“文本”DocFlavor,我不能给打印机提供除“autosense”之外的任何其他提示。
使用Windows的记事本打印文件时,它适用于所有三台打印机。差异似乎是我打印“RAW”数据,而记事本使用“NT EMF 1.008”。
有没有办法让我使用java PrintService工作?
答案 0 :(得分:0)
有没有办法让我使用java PrintService工作?
不确定。这是Oracle在Java Print Service上的写作。
我使用过旧的AWT打印服务。使用AWT打印服务,您必须将文本转换为图像,然后打印图像。
答案 1 :(得分:0)
使用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]);
}
借来的样本