Java 向纯文本打印作业添加控制数据

Java 向纯文本打印作业添加控制数据,java,printing,print-spooler-api,Java,Printing,Print Spooler Api,很抱歉这个冗长的问题,我花了几天的时间试图解决这个问题,到目前为止,我已经找到了几十种解决问题的方法 我目前正在尝试使用DatamaxO'neille Classmark3打印机打印一些标签。生成标签数据的java应用程序不容易修改,只需通过内置的“打印”功能输出纯文本(下面的输出示例) 当我打印到理光打印机时,它工作(使用理光驱动程序中的CR+LFreplacement)。但是,当我打印到标签打印机时,它不会。我被告知标签打印机需要“控制代码”和“编码数据”才能打印 我已经能够从打印机记录.p

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

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

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

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

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


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

当你从记事本之类的东西打印文本时,文本会被发送到一个打印驱动程序,该驱动程序会将其转换成打印机能理解的格式。您通常不能将控制代码添加到记事本中的文本中并使其工作,因为除了要打印的纯文本之外,它不会被视为任何内容

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


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

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

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


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

我最后做的是使用打印机日志功能将所有作业记录到C:\printlogs\中,并有一个批处理文件,该文件每隔几秒钟循环一次,对文件夹中的每个文件运行notepad/p,然后将它们全部清理干净


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

我最后做的是使用打印机日志功能将所有作业记录到C:\printlogs\中,并有一个批处理文件,每隔几秒钟循环一次,对文件夹中的每个文件运行notepad/p,然后将它们全部清理干净


我知道这是一个混乱的解决方法,但它可以工作。

谢谢你,我真的希望不必编辑这个应用程序(它是封闭源代码,扩展脚本支持很差),但至少在这方面我有地方可以开始!谢谢你,我真的希望不必编辑这个应用程序(它是封闭源代码的,扩展脚本支持很差),但至少在这方面我有地方可以开始!我不清楚这里的细节。Java应用程序是将.prn(文本)文件生成到磁盘还是将其实际发送到打印机?如果它使用的是Java打印API,那么一切都会正常工作。如果它生成一个文本文件,你需要打印它(如果目录总是在同一个地方生成,你可以监视目录),如Carey所述。如果使用Java,它有自己的。Java应用程序使用自己的(非常奇怪的)打印功能,使用端口9100将原始数据流输出到打印机。打印机可以为我将.prn文件记录到C:\中,然后我可以使用记事本打开该文件,并通过打印驱动程序将其发送到打印机,从而生成正确编码的.prn文件,打印机现在可以理解该文件。感谢您的澄清。是的,9100是“原始”或直接打印数据端口。大多数打印机将在这里接受文本并将其打印出来,如果发送,还可能检测到其他语言数据。不管怎样,你的解决方案是有效的,并且帮你省去了几天的痛苦是的,我原以为它是从原始数据端口打印的,但根据制造商的说法,打印机不懂纯文本。我不清楚这里的细节。Java应用程序是将.prn(文本)文件生成到磁盘还是将其实际发送到打印机?如果它使用的是Java打印API,那么一切都会正常工作。如果它生成一个文本文件,你需要打印它(如果目录总是在同一个地方生成,你可以监视目录),如Carey所述。如果使用Java,它有自己的。Java应用程序使用自己的(非常奇怪的)打印功能,使用端口9100将原始数据流输出到打印机。打印机可以为我将.prn文件记录到C:\中,然后我可以使用记事本打开该文件,并通过打印驱动程序将其发送到打印机,从而生成正确编码的.prn文件,打印机现在可以理解该文件。感谢您的澄清。是的,9100是“原始”或直接打印数据端口。大多数打印机将在这里接受文本并将其打印出来,如果发送,还可能检测到其他语言数据。不管怎样,你的解决方案是有效的,并且帮你省去了几天的痛苦是的,我早就料到了
Unit name [LF]
Unit description [LF]
Quantity
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.