我在尝试使用 Deskjet 2752e 打印机使用 Java 中的 PCL 打印简单文本时遇到了困难。该打印机支持 HP PCL 3 GUI、HP PCLm (HP Apps/UPD) 和 URF (AirPrint) 1。尽管对 PCL 代码进行了多次尝试和变化,但我一直无法成功打印。即使发送纯文本也会导致打印机没有响应。
我的目标是通过 9100 端口原始数据将打印作业直接发送到我的打印机网络,如果可能的话,能够使用 x 和 y 坐标定位文本。我正在开发一个 Android 应用程序,它可以打印文本,而无需提示用户进行打印设置或离开应用程序。对于应用程序来说,自动有效地将必要的数据发送到打印机并及时启动打印过程至关重要。作为该应用程序的唯一用户,我的目标是简化打印体验并消除不必要的提示,从而使应用程序更快、更高效。所以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();
}