2010-10-01 50 views
2

iTextSharp是一個很好的工具,我可以使用 PdfTextExtractor.GetTextFromPage(reader, iPage) + " "; 它很好用,但有沒有一種方法可以從pdf中僅提取粗體文本(例如標題) ,而不是一切?從PDF中只提取粗體文本的最佳方式

無論編程語言如何,任何解決方案都很有用。謝謝

回答

1

這個工作最好的選擇之一就是TET by pdflib.com,它能夠提取到TETML格式。可用於Windows,Mac OS X,Linux,Solaris,AIX,HP-UX ...

我不確定它是否確實承認「標題」本身(因爲PDF不太瞭解結構加價,只有視覺 ones) - 但它肯定會告訴你確切的位置和字體由每個字符串使用。

3

從iText中,您需要使用com.itextpdf.text.pdf.parser包中的類。

具體來說,您需要使用帶有自定義TextExtractionStrategy的PdfTextExtractor來檢查字體名稱。大膽的字體通常在他們的名字中有「大膽」的世界。

潛在問題: 1)不是所有看起來像文本的東西都是用字體和字母呈現的。它可以是路徑或位圖。提取此類文本的唯一方法是使用OCR,並且無法獲取字體信息。 2)字體編碼。映射到您在PDF中看到的字形的字節可能沒有從這些字節到實際字符信息的映射。 3)不是所有粗體文字都用粗體字體。一些粗體文本是通過用相當細的線條以及通常的填充來撫摸文本輪廓而形成的。在這種情況下,文本渲染模式將被設置爲「筆畫&填充」而不是通常的「填充」。這是非常罕見的,但它確實不時發生。

測試問題1和2的簡單方法是嘗試複製並粘貼Reader/Acrobat中的文本。如果你不能選擇它,那幾乎肯定是路徑或圖像。如果你可以選擇它,但字符粘貼時會出現隨機垃圾,那麼iText會出現相同的垃圾。

問題3並不難以測試程序,儘管您必須根據具體情況處理它。你需要調用TextRenderInfo.getTextRenderMode()。 0是填充(服務的標準方式),2是「填充和填充」。

因此,您的TextExtractionStrategy可以存留beginTextBlock,endTextBlock,renderImage和getResultantText。在renderText實現中,您必須檢查字體名稱(對於「粗體」,不區分大小寫)和文本渲染模式。如果其中之一是這種情況,那麼這是您標題的一部分。

這一切都假設你正在處理任意的PDF文件。如果你所有的PDF都來自同一個源,你可以開始偷工減料。我將把它作爲讀者的練習。