[英]Determine whether a PDF page contains text or is purely picture
如何使用Java確定PDF頁面是包含文本還是純圖片?
我搜索了許多論壇和網站,但我還沒有找到答案。
是否可以從PDF中提取文本,以了解頁面是圖片格式還是文本格式?
PdfReader reader = new PdfReader(INPUTFILE);
PrintWriter out = new PrintWriter(new FileOutputStream(OUTPUTFILE));
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
// here I want to test the structure of the page !!!! if it's possible
out.println(PdfTextExtractor.getTextFromPage(reader, i));
}
沒有防水的方法可以做你想做的事。
文本可以以不同的方式出現在 PDF 文件中。 例如:可以使用圖形狀態運算符而不是文本狀態來繪制所有字形。 (如果這對您來說聽起來像中文,我很抱歉,但我可以向您保證它是正確的 PDF 語言。)
如果一個涵蓋最常見情況並且偶爾會遺漏一個奇異 PDF 的臨時解決方案對您來說是合適的,那么您已經有了一個很好的第一個解決方法。
在您的代碼中,您遍歷所有頁面,然后詢問 iText 頁面上是否有任何文本。 這已經是一個很好的跡象。
在內部,您的代碼正在使用RenderListener
接口。 iText 解析頁面的內容並觸發特定RenderListener
實現中的方法。 這是自定義實現的實現: MyTextRenderListener 。 此自定義實現用於ParsingHelloWorld示例。
還有一個renderImage()
方法(例如參見MyImageListener )。 如果這個方法被觸發,你就100%確定頁面中還有一個Image,你可以使用ImageRenderInfo
對象來獲取圖像的位置、寬度和高度(即:如果你知道如何解釋getImageCTM()
方法返回的Matrix
)。
使用所有這些元素,您已經可以在很長一段時間內實現您的需求,但請注意,總會有一些奇特的 PDF 文件可以逃脫您的所有檢查。
使用 PDFBox 2.x 你可以試試這個:
private boolean hasText(PDDocument doc) throws IOException {
PDFTextStripper stripper = new PDFTextStripper();
return stripper.getText(doc).trim().length() != 0;
}
不幸的是,它首先掃描整個文件並且不會在第一個文本塊處停止。 但如果需要,您可以接收全文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.