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;     } }
   |