PDFBox創建並打印PDF文件, 以及縮放問題的處理.


PDFBox帶了一些很方便的API, 可以直接創建 讀取 編輯 打印PDF文件.

創建PDF文件


 

 1     public static byte[] createHelloPDF() {
 2         ByteArrayOutputStream out = new ByteArrayOutputStream();
 3         try {
 4             PDDocument doc = new PDDocument();
 5             PDPage page = new PDPage();
 6             doc.addPage(page);
 7             PDFont font = PDType1Font.HELVETICA_BOLD;
 8             PDPageContentStream content = new PDPageContentStream(doc, page);
 9             content.beginText();
10             content.setFont(font, 20);
11             content.moveTextPositionByAmount(250, 700);
12             content.drawString("Hello Print!");
13 
14             content.endText();
15             content.close();
16             doc.save(out);
17             doc.close();
18         } catch (Exception e) {
19             e.printStackTrace();
20         }
21         return out.toByteArray();
22     }

這邊如果不把他save到byte[]里, 而是直接close, 返回PDDocument 給外部文件.

可能會出現Cannot read while there is an open stream writer

 打印文件


1         // 獲取本地創建的空白PDF文件
2         PDDocument document = PDDocument.load(createHelloPDF());
3         // 加載成打印文件
4         PDFPrintable printable = new PDFPrintable(document);
5         PrinterJob job = PrinterJob.getPrinterJob();
6         job.setPrintable(printable);
7         job.print();

如需要打印自定義紙張, 參加另外一篇博客 使用PDFBox打印自定義紙張的PDF

如果想要讀取本地pdf文件, 那就更簡單了, 直接 

1         InputStream in = new FileInputStream("d:\\cc.pdf");
2         PDDocument document = PDDocument.load(in); 

縮放問題


不過發現打印出來的pdf文件存在縮放問題. 顯得邊距很大, 能跑馬.

研究了下, 發現PDFPrintable可以接受是否縮放的參數.

 1         public enum Scaling {
 2             // 實際大小
 3             ACTUAL_SIZE,
 4             // 縮小
 5             SHRINK_TO_FIT,
 6             // 拉伸
 7             STRETCH_TO_FIT,
 8             // 適應
 9             SCALE_TO_FIT;
10 
11             private Scaling() {
12             }
13         }

 

因此只要在 new PDFPrintable(document), 傳入Scaling, 就不會縮放了.

Scaling.ACTUAL_SIZE


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM