1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| package com.zby.test;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.printing.PDFPrintable; import org.apache.pdfbox.printing.Scaling;
import javax.print.PrintService; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.Sides; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.PrinterJob; import java.io.File; import java.io.IOException;
/** * @Author: 赵博雅 * @Date: 2019/7/12 9:01 */ public class box { public static void main(String[] args) throws Exception { String pdfFile = "G:\\赵博雅简历.pdf";//文件路径 File file = new File(pdfFile); String printerName = "NPIC35336";//打印机名包含字串 PDFprint(file,printerName); } public static void PDFprint(File file ,String printerName) throws Exception { PDDocument document = null; try { document = PDDocument.load(file); PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setJobName(file.getName()); if (printerName != null) { // 查找并设置打印机 //获得本台电脑连接的所有打印机 PrintService[] printServices = PrinterJob.lookupPrintServices(); if(printServices == null printServices.length == 0) { System.out.print("打印失败,未找到可用打印机,请检查。"); return ; } PrintService printService = null; //匹配指定打印机 for (int i = 0;i < printServices.length; i++) { System.out.println(printServices[i].getName()); if (printServices[i].getName().contains(printerName)) { printService = printServices[i]; break; } } if(printService!=null){ printJob.setPrintService(printService); }else{ System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。"); return ; } } //设置纸张及缩放 PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE); //设置多页打印 Book book = new Book(); PageFormat pageFormat = new PageFormat(); //设置打印方向 pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向 pageFormat.setPaper(getPaper());//设置纸张 book.append(pdfPrintable, pageFormat, document.getNumberOfPages()); printJob.setPageable(book); printJob.setCopies(1);//设置打印份数 //添加打印属性 HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet(); pars.add(Sides.DUPLEX); //设置单双页 printJob.print(pars); }finally { if (document != null) { try { document.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static Paper getPaper() { Paper paper = new Paper(); // 默认为A4纸张,对应像素宽和高分别为 595, 842 int width = 595; int height = 842; // 设置边距,单位是像素,10mm边距,对应 28px int marginLeft = 10; int marginRight = 0; int marginTop = 10; int marginBottom = 0; paper.setSize(width, height); // 下面一行代码,解决了打印内容为空的问题 paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom)); return paper; } }
|