最近,由於項目需求,需要增加系統調用打印機打印PDF文檔功能。以前在Asp.Net項目中做過套打,但是現在的需求直接文檔打印,下面是實現代碼調用打印機的兩種方法。
1.Java Print Service
Java Print Service是Java自帶的打印框架,所在的包javax.print.PrintService;。這種方案侷限性比較大,只能打印PNG文件(廉價打印機不支持打印PDF)
2.Apache PDFBox
它的打印實現也是封裝了Java Service Print框架的打印功能,支持性比較好。
第一步,引入maven
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.8</version>
</dependency>
第二步,複製下面代碼
// 使用打印機的名稱
String printName = "Win32 Printer : Microsoft Print to PDF";
String pdfPath = "D:\test.pdf";
File file = new File(pdfPath);
// 讀取pdf文件
PDDocument document = PDDocument.load(file);
// 創建打印任務
PrinterJob job = PrinterJob.getPrinterJob();
// 遍歷所有打印機的名稱
for (PrintService ps : PrinterJob.lookupPrintServices()) {
String psName = ps.toString();
// 選用指定打印機
if (psName.equals(printerName)) {
isChoose = true;
job.setPrintService(ps);
break;
}
}
job.setPageable(new PDFPageable(document));
Paper paper = new Paper();
// 設置打印紙張大小
paper.setSize(598,842); // 1/72 inch
// 設置打印位置 座標
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); // no margins
// custom page format
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
// override the page format
Book book = new Book();
// append all pages 設置一些屬性 是否縮放 打印張數等
book.append(new PDFPrintable(document, Scaling.ACTUAL_SIZE), pageFormat, 1);
job.setPageable(book);
// 開始打印
job.print();