首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javax.print通过cups打印

使用javax.print通过cups打印
EN

Stack Overflow用户
提问于 2011-08-25 02:26:59
回答 1查看 8.6K关注 0票数 9

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

该文件是用于收据击打式打印机的ESC/P文件。它拥有linux原生CUPS驱动程序和所有可用的东西。

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

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

它要么完全忽略print()命令,要么只翻出一张白纸。运行lp filename可以完美地打印出它,那么如何让javax.print在功能上等同于lp filename

我不打算使用javax.print,我可以使用其他“东西”,可能会开始研究cups4J,但它似乎会将我限制在Linux/*nix上,这目前还可以,但更愿意有一个跨平台的解决方案。

我可以只对文件发出lp系统命令,但是,我需要更细粒度的控制。这些不是我们打印的收据,它们是票,票价从5美元到数千美元不等。目前,如果我们检测到打印问题,我们会使交易无效,如果打印了任何东西,它是无效的,我们不会掉以轻心地重印,大多数情况下,如果客户丢失了副本,我们会收取打印新副本的费用。这样做的原因是,我们将POS系统从Windows更改为Linux,并将打印机从通过串行端口直接访问更改为通过USB管理CUPS。这是我不能工作的代码。任何帮助都是非常感谢的。

代码语言:javascript
复制
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) {
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-04 09:16:20

我和cups4j的关系很好。首先得到你的打印机。

代码语言:javascript
复制
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并将其发送到打印机

代码语言:javascript
复制
 PrintJob printJob = new PrintJob.Builder(inputStream).jobName("Jobname").build();
    PrintRequestResult result = selectedPrinter.print(printJob);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7180397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档