java 批量打印工具

从3d软件里面导出很一张cad总图,然后在总图里面分选各个分部,弄出几十张pdf文件。需要打印出来。

本来觉得应该是很简单的事,想想下载一个批量打印工具就搞定了啊,网络上找啊找,要么是病毒,要么是没给钱,有打印限制(一次10张),我晕,这玩意这么简单的事,想想就伤,整天大数据,人工智能的吹着,这TMD的批量打印点文件还这么折腾。

必须弄一个,查资料,先想肯定是c++这东东好弄吧,但这玩意ui是个事,弄成web的吧,感觉又不太好,毕竟是客户端程序,那跨平台的感觉QT应该可以,代码量是少,QT得先把pdf转成图片,然后才能调用打印机,绕。

本人java出生,又仔细看了看java的打印代码,网上的代码就别提有多伤了,弄下来要么依赖windows组件,要么运行不了。

无赖,不能直接copy,那就只能自己撸。

经查,pdfbox带打印功能,https://pdfbox.apache.org/ ,这货也是醉了,官方网页里面没有maven的配置 。

maven 配置地址: http://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox ,我使用的是2.0.11版本。

核心代码很少,很简单:

public class PrintWork {
    public static PDDocument document;
    public static void print(File file) throws IOException, PrinterException {
            PDDocument document = PDDocument.load(file);
            print(document);
            document.close();
    }
    private static void print(PDDocument document) throws IOException, PrinterException
    {
        PrinterJob job = PrinterJob.getPrinterJob();
        job.setPageable(new PDFPageable(document));
        job.print();
    }
}

这还是官方文档里面的example。

经过测试没有问题,多个文档打印也没问题,直接循环调用 print 方法即可:

for (int i = 0; i < total; i++) {
            if (this.workStatus == false) {
                break;
            }
            try {
                item = this.printList.get(i);
                if (item.printStatus == PrintItem.PrintStatus.PRINTED_SUCCESS) {
                    continue;
                }
                PrintWork.print(item.file);//这里传入文件对象
                item.printStatus = PrintItem.PrintStatus.PRINTED_SUCCESS;
                this.tableModel.fireTableDataChanged();
            } catch (IOException ex) {
                Logger.getLogger(MainJFrame.class.getName()).log(Level.SEVERE, null, ex);
                item.printStatus = PrintItem.PrintStatus.PRINTED_ERROR;
            } catch (PrinterException ex) {
                Logger.getLogger(MainJFrame.class.getName()).log(Level.SEVERE, null, ex);
                item.printStatus = PrintItem.PrintStatus.PRINTED_ERROR;
            }
            this.tableModel.fireTableDataChanged();
}

从表现上看,for循环提交的文档,pdfwork会合并成一个文件给打印机,因为打印机队列里面只有一个文件,而且java程序关闭后,打印不会停止。

加点UI:

 

最后是重点,源码,欢迎大家撸,程序使用maven管理, netbean开发ui,eclipse再修正一下,主要是netbeans里面ui自动生成的代码不让更改。

源码 :https://gitee.com/asdtiang/batch-printing

java运行包:https://gitee.com/asdtiang/batch-printing/repository/archive/master.zip 

 

转载于:https://my.oschina.net/asdtiang/blog/1929206

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值