尝试使用 Deskjet 2752e 打印机使用 Java 中的 PCL 打印简单文本时遇到困难。打印机支持 HP PCL 3 GUI、HP PCLm (HP Apps/UPD) 和 URF (AirPrint)1。尽管对 PCL 代码进行了多次尝试和变化,我仍然无法成功打印。即使发送纯文本也会导致打印机没有响应。
我的目标是将简单的文本打印作业直接发送到我的打印机网络,并能够使用 x 和 y 坐标定位文本。为了实现这一目标,我正在开发一个 Android 应用程序,它可以打印文本,而无需提示用户进行打印设置或离开应用程序。对于应用程序来说,自动有效地将必要的数据发送到打印机并及时启动打印过程至关重要。作为该应用程序的唯一用户,我的目标是简化打印体验并消除不必要的提示,从而使应用程序更快、更高效。
这是我使用的最后一个代码:
private void sendPrintJob() {
System.out.println("Connecting to the printer...");
try (Socket socket = new Socket("192.168.0.6", 9100)) {
System.out.println("Connected.");
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write(generatePCL3GUI().getBytes());
out.flush();
out.close();
System.out.println("Print job successfully sent.");
} catch (Exception e) {
System.out.println(e);
}
}
public String generatePCL3GUI() {
StringBuilder pclCode = new StringBuilder();
pclCode.append("\u001B%-12345X@PJL JOB\r\n");
pclCode.append("@PJL ENTER LANGUAGE=PCL3GUI\r\n");
pclCode.append("\u001B*s0M"); // Set color mode to monochrome
pclCode.append("\u001B*t300R"); // Set resolution to 300 dpi
pclCode.append("\u001B*r0F"); // Set orientation to portrait
pclCode.append("\u001B(8U"); // Select font: Courier New
pclCode.append("\u001BE"); // Start of the print job
pclCode.append("\u001B&a100H"); // Set position (x=100, y=100)
pclCode.append("Hello, world!\r\n"); // Print text
pclCode.append("\u001B%-12345X@PJL EOJ\r\n");
return pclCode.toString();
}
文件输入格式也可以考虑PDF。 jrender支持将 PDF 渲染为 PCLm。
如果您通过 IPP 从打印机查询document-format-supported
,您可能还会看到
text/plain
。通过 IPP 提交可打印文档受 ipp-client支持,并且提供比通过端口 9100 的 jet-direct 更多的功能。