在 Java 中獲取有關 PDF 的信息
一、概述
在本教程中,我們將了解使用 Java 中的iText和PDFBox庫獲取 PDF 文件信息的不同方式。
2. 使用 iText 庫
iText 是一個用於創建和操作 PDF 文檔的庫。此外,它還提供了一種獲取文檔信息的簡便方法。
2.1. Maven 依賴
讓我們首先在pom.xml
中聲明itextpdf
依賴項:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
2.2.獲取頁數
讓我們使用getNumberOfPages()
方法創建一個PdfInfoIText
類,該方法返回 PDF 文檔中的頁數:
public class PdfInfoIText {
public static int getNumberOfPages(final String pdfFile) throws IOException {
PdfReader reader = new PdfReader(pdfFile);
int pages = reader.getNumberOfPages();
reader.close();
return pages;
}
}
在我們的示例中,首先,我們使用PdfReader
類從File
對象加載 PDF 。之後,我們使用getNumberOfPages()
方法。最後,我們關閉PdfReader
對象。讓我們為它聲明一個測試用例:
@Test
public void givenPdf_whenGetNumberOfPages_thenOK() throws IOException {
Assert.assertEquals(4, PdfInfoIText.getNumberOfPages(PDF_FILE));
}
在我們的測試用例中,我們驗證存儲在測試resources
文件夾中的給定 PDF 文件的頁數。
2.3.獲取 PDF 元數據
現在讓我們看看如何獲取文檔的元數據。我們將使用getInfo()
方法。該方法可以獲取文件的信息,如標題、作者、創建日期、創建者、製作者等。讓我們將getInfo()
方法添加到我們的PdfInfoIText
類:
public static Map<String, String> getInfo(final String pdfFile) throws IOException {
PdfReader reader = new PdfReader(pdfFile);
Map<String, String> info = reader.getInfo();
reader.close();
return info;
}
現在,讓我們編寫一個測試用例來獲取文檔的創建者和製作者:
@Test
public void givenPdf_whenGetInfo_thenOK() throws IOException {
Map<String, String> info = PdfInfoIText.getInfo(PDF_FILE);
Assert.assertEquals("LibreOffice 4.2", info.get("Producer"));
Assert.assertEquals("Writer", info.get("Creator"));
}
2.4.了解 PDF 密碼保護
我們現在想知道文檔是否有密碼保護。為此,讓我們將isEncrypted()
方法添加到PdfInfoIText
類:
public static boolean isPasswordRequired(final String pdfFile) throws IOException {
PdfReader reader = new PdfReader(pdfFile);
boolean isEncrypted = reader.isEncrypted();
reader.close();
return isEncrypted;
}
現在,讓我們創建一個測試用例來查看此方法的行為方式:
@Test
public void givenPdf_whenIsPasswordRequired_thenOK() throws IOException {
Assert.assertFalse(PdfInfoIText.isPasswordRequired(PDF_FILE));
}
在下一節中,我們將使用 PDFBox 庫完成相同的工作。
3. 使用 PDFBox 庫
獲取有關 PDF 文件的信息的另一種方法是使用 Apache PDFBox 庫。
3.1. Maven 依賴
我們需要在項目中包含pdfbox
Maven 依賴項:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.0-RC1</version>
</dependency>
3.2.獲取頁數
PDFBox 庫提供了處理 PDF 文檔的能力。要獲取頁數,我們只需使用Loader
類及其loadPDF()
方法從File
對象加載文檔。之後,我們使用PDDocument
類的getNumberOfPages()
方法:
public class PdfInfoPdfBox {
public static int getNumberOfPages(final String pdfFile) throws IOException {
File file = new File(pdfFile);
PDDocument document = Loader.loadPDF(file);
int pages = document.getNumberOfPages();
document.close();
return pages;
}
}
讓我們為它創建一個測試用例:
@Test
public void givenPdf_whenGetNumberOfPages_thenOK() throws IOException {
Assert.assertEquals(4, PdfInfoPdfBox.getNumberOfPages(PDF_FILE));
}
3.3.獲取 PDF 元數據
獲取 PDF 元數據也很簡單。我們需要使用getDocumentInformation()
方法。此方法將文檔元數據(例如文檔的作者或其創建日期)作為PDDocumentInformation
對象返回:
public static PDDocumentInformation getInfo(final String pdfFile) throws IOException {
File file = new File(pdfFile);
PDDocument document = Loader.loadPDF(file);
PDDocumentInformation info = document.getDocumentInformation();
document.close();
return info;
}
讓我們為它寫一個測試用例:
@Test
public void givenPdf_whenGetInfo_thenOK() throws IOException {
PDDocumentInformation info = PdfInfoPdfBox.getInfo(PDF_FILE);
Assert.assertEquals("LibreOffice 4.2", info.getProducer());
Assert.assertEquals("Writer", info.getCreator());
}
在這個測試用例中,我們只驗證文檔的製作者和創建者。
3.4.了解 PDF 密碼保護
我們可以使用PDDocument
類的isEncrypted()
方法檢查 PDF 是否受密碼保護:
public static boolean isPasswordRequired(final String pdfFile) throws IOException {
File file = new File(pdfFile);
PDDocument document = Loader.loadPDF(file);
boolean isEncrypted = document.isEncrypted();
document.close();
return isEncrypted;
}
讓我們創建一個驗證密碼保護的測試用例:
@Test
public void givenPdf_whenIsPasswordRequired_thenOK() throws IOException {
Assert.assertFalse(PdfInfoPdfBox.isPasswordRequired(PDF_FILE));
}
4。結論
在本文中,我們學習瞭如何使用兩個流行的 Java 庫獲取有關 PDF 文件的信息。 GitHub 上提供了本文所示代碼的工作版本。