簡體   English   中英

判斷一個PDF頁面是包含文字還是純圖片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM