最近幫公司寫了好多小指令碼處理Excel和Pdf,在此記錄一下,以備下次使用還能找得到如何實現的,開發過程中主要使用pdfbox實現PDF頁面的新增刪除操作,Maven依賴如下:
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.24</version> </dependency>
讀取PDF頁面內容實現步驟
讀取PDF檔案,建立檔案輸入流。
String filePath = "D:\\Download\\test.pdf"; FileInputStream fileInputStream = new FileInputStream(new File(filePath); PDDocument document = PDDocument.load(fileInputStream);
建立PDFTextStripper物件,讀取頁面的文字內容
使用PDFTextStripper
物件需要引入一個Maven依賴<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.24</version> </dependency>
建立
PDFTextStripper
物件,設定要讀取第幾頁到第幾頁的文字內容,下面的示例中讀取第一頁的文字內容PDFTextStripper ps = new PDFTextStripper(); ps.setStartPage(1); ps.setEndPage(1); String content = ps.getText(document);
新增新的PDF頁面實現步驟
讀取PDF檔案,建立檔案輸入流不做演示,這裏預設已經建立了文件物件PDDocument
載入字型物件
因為內容需要指定字型,所以要建立一個字型物件PDType0Font
PDType0Font font = PDType0Font.load(document, new File("D:\\Download\\ZiTiChuanQiNanAnTi-MianFeiShangYong-2.ttf"));
建立一個新的頁面新增到document
PDPage page = new PDPage(); document.addPage(page);
建立一個PDF頁面內容操作流,用來向頁面上新增文字內容
showText()
用來在頁面上新增文字內容,但是必須要在語句前後分別呼叫beginText()
和endText()
方法,並且必須呼叫setFont()
方法來設定內容的字型,否則執行會出錯!PDPageContentStream contentStream=new PDPageContentStream(document, page); contentStream.beginText(); contentStream.newLineAtOffset(25, 700); contentStream.setFont(font, 14); contentStream.showText("你好"); contentStream.endText(); contentStream.close();
儲存PDF文件物件到指定檔案
document.save("D:\\Download\\newTest.pdf");
刪除PDF指定頁面實現步驟
刪除檔案比較簡單,只需要呼叫
document.removePage(index)
方法,傳入要刪除的頁碼即可,刪除後將document物件儲存到指定檔案。這裏建立檔案的步驟不做演示,這裏就預設已經建立了文件物件PDDocument。
document.removePage(i); document.save("D:\\Download\\newTest.pdf");