gpt4 book ai didi

java - 使用 javax.print 通过 cups 打印

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:56 26 4
gpt4 key购买 nike

我有一个文件,如果我使用命令 lp filename 就可以正常工作。

该文件是用于收据冲击式打印机的 ESC/P 文件。那有 linux 本地 CUPS 驱动程序和所有工作。

我正在尝试使用 javax.print API,以便我可以对打印进行更细粒度的控制,并希望保持跨平台兼容,尽管 Linux 是目标平台。

我已经尝试了人类已知的每一种 DocFlavor 组合和每一种数据类型(InputStreambyte[]Reader 等。 )

它要么完全忽略 print() 命令,要么只是翻出一张白纸。运行 lp filename 打印完美,那么如何让 javax.print 执行与 lp filename 等效的功能?

我不打算使用 javax.print 我可以使用其他“东西”并且可能会开始研究 cups4J 但它似乎只会限制我使用 Linux/*nix,这对现在,但宁愿有一个跨平台的解决方案。

我可以只对文件发出 lp 系统命令,但是,我需要更细粒度的控制。这些不是我们打印的收据,它们是票,票的价格从 5.00 美元到数千美元不等。目前,如果我们检测到打印问题,我们会取消交易,如果有任何打印品无效,我们不会掉以轻心,而且大多数情况下,如果客户丢失了他的副本,我们会收取打印新副本的费用。哦,这样做的原因是我们正在将 POS 系统从 Windows 更改为 Linux,并将打印机从通过串行端口直接访问更改为通过 USB 管理的 CUPS。这是我的代码不起作用。任何帮助表示赞赏。

try {
// Find the default service
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

PrintService service = PrintServiceLookup.lookupDefaultPrintService();

// Create the print job
DocPrintJob job = service.createPrintJob();
InputStream in = new FileInputStream("/home/bart/real.escp");
Doc docNew = new SimpleDoc(in,flavor,null);

// Monitor print job events; for the implementation of PrintJobWatcher,
// see Determining When a Print Job Has Finished
PrintJobWatcher pjDone = new PrintJobWatcher(job);

// Print it
job.print(docNew, null);

// Wait for the print job to be done
pjDone.waitForDone();

// It is now safe to close the input stream
in.close();
} catch (PrintException e) {
} catch (IOException e) {
}

最佳答案

我对 cups4j 没问题。首先获取您的打印机。

try { 
CupsClient client = new CupsClient("addressOfTheCupsServer", 631);
List<CupsPrinter> printers = client.getPrinters();
if (printers.size() == 0) {
throw new RuntimeException("Cant list Printer");
}
for (CupsPrinter cupsPrinter : printers) {
if (cupsPrinter.getName().equals("NameOfPrinter")) {
selectedPrinter = cupsPrinter;
}
}
}catch (Exception ignored){
ignored.printStackTrace();
}
}

然后创建一个打印作业并将其发送到打印机

 PrintJob printJob = new PrintJob.Builder(inputStream).jobName("Jobname").build();
PrintRequestResult result = selectedPrinter.print(printJob);

关于java - 使用 javax.print 通过 cups 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7180397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com