将控制数据添加到纯文本打印作业

时间:2016-08-10 10:04:44

标签: java printing print-spooler-api

很抱歉这个冗长的问题,我花了几天时间试图解决这个问题,到目前为止已经找到了几种不能解决问题的方法。

我目前正在尝试使用Datamax O'Neill E Class Mark 3打印机打印一些标签。生成标签数据的java应用程序不能轻易修改,只需通过内置的“打印”功能输出纯文本(下面的输出示例)

Unit name [LF]
Unit description [LF]
Quantity

当我打印到理光打印机时,它可以工作(在理光驱动程序中使用CR+LF替换)。但是,当我打印到标签打印机时,它没有。我被告知标签打印机需要“控制代码”和“编码数据”才能打印。

我已经能够从打印机记录 .prn 文件,当从记事本向打印机发送完全相同的数据时, .prn 文件很多更大,似乎是“编码”包含控制代码。

这完全在使用联网打印机的Windows环境中(也尝试过USB)。我基本上需要为我的Java应用程序打印一些内容,这将为数据添加必要的“编码”,然后将其传递给Datamax打印机。有什么想法吗?

我明天在办公室时会试着发一些样品,因为我现在正在手机上打字。

2 个答案:

答案 0 :(得分:1)

我最终做的是使用打印机日志记录功能将所有作业记录到C:\ printlogs \并有一个批处理文件,每隔几秒就会循环一次,在文件夹中的每个文件上运行记事本/ P,然后全部清除它们起来。

我知道这是一个混乱的解决方法,但它确实有效。

答案 1 :(得分:-1)

当您从记事本等打印文本时,该文本会被发送到打印驱动程序,并将其转换为打印机可以理解的格式。您通常无法在记事本中将控制代码添加到文本中并使其有效,因为它不会被视为除了要打印的纯文本之外的任何内容。

可以找到该打印机的程序员手册here。这为您提供了在打印机上打印标签所需的一切知识。但是,为了将这些命令发送到打印机,您只能将它们粘贴到记事本中。您必须绕过打印驱动程序将它们直接写入打印机。为此,您需要使用WritePrinter function。打印步骤的顺序如下:

To begin a print job, call StartDocPrinter.
To begin each page, call StartPagePrinter.
To write data to a page, call WritePrinter.
To end each page, call EndPagePrinter.
Repeat 2, 3, and 4 for as many pages as necessary.
To end the print job, call EndDocPrinter.

WritePrinter的MSDN条目包含指向示例代码的链接(在C中)。