Windows打印的一些常用知识

Windows打印
可以使用jdk中带有的java.awt.print包。

Windows打印暂不支持通过java代码添加打印机到系统中(当然,可能WindowsApi中有,这方面暂时没有去查资料)。

Windows打印机用户界面,cmd中输入rundll32 printui.dll,PrintUIEntry,即可看到Windows打印机常用的命令,有一个命令是使用 INF 添加打印机驱动程序:

rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" /f c:\infpath\infFile.inf

这个命令会跳转到Windows安装驱动界面,无法直接安装驱动,还是需要用户继续操作安装。

常用方法:

  1. 获取打印机列表:

    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
    
  2. 获取默认打印机:

    PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
    

如果想获取指定名称打印机,需要获取到所有的打印机列表,写一个for循环。建议写成一个独立的方法,打印机列表可以写为一个静态变量,第一次初始化时赋值,之后通过getter,setter方法改变这个变量。

  1. 创建打印任务

    DocPrintJob job = printer.createPrintJob();
    

PrinterJob job = PrintJob.getPrintJob();
job.setPrintService(Printer);

这两个方法均可以创建打印任务。需要注意的是,产生的job并不是同一个类,DocPrintJob执行打印的时候调用print(doc, printRequestAttributeSet);需要两个参数,第一个参数为数据,第二个为打印请求属性;第二种job在执行print()之前,需要将纸张大小、属性、打印数据放入到job中,直接执行print()方法即可,不需要参数。

第二种方法代码示例(此处例子为打印pdf):
三方包用到的jar为apache的pdfbox

 InputStream in = new FileInputStream(filePath);
 PDDocument document = PDDocument.load(in);
 List<PDDocument> list = splitter.split(document);
 PDDocument printDoc = new PDDocument();
 for (PDDocument pd : list) {
       printDoc.addPage(pd.getPage(0));
}
PDFPrintable pdfPrintable = new PDFPrintable(printDoc, Scaling.ACTUAL_SIZE);
// pageFormat可以用来设置纸张为横向还是竖向,size可以控制打印份数(PORTRAIT:纵向,LANDSCAPE:横向)
book.append(pdfPrintable, pageFormat, size);
job.setPageable(book);
job.print();
printDoc.close();
in.close();
  1. 执行打印

    job.print()
    ||
    job.print(doc,printRequestAttributeSet)
    
  2. 监听器
    DocPrintJob支持添加打印监听器,通过使用addPrintJobListener即可。

    job.addPrintJobListener( new PrintJobListener() {
        public void cancel(PrintJobEvent pje) {
            logger.info(“cancel” + pje.getPrintEventType());
        }
    });
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值