2013-07-15 41 views
0
PDFTextStripper stripper = new PDFText2HTML(encoding); 
String result = stripper.getText(document).trim(); 

結果解析包含有類似PDFTextStripper與錯誤的編碼

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> <html><head><title>Inserat 
SeLe EE rev</title> <meta http-equiv="Content-Type" 
content="text/html; charset=utf-8"> </head> <body> <div 
style="page-break-before:always; 
page-break-after:always"><div><p>&#0;&#1;&#2;&#3;&#4;&#5;&#6;&#7;&#... 

,而不是

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> <html><head><title>Inserat 
SeLe EE rev</title> <meta http-equiv="Content-Type" 
content="text/html; charset=utf-8"> </head> <body> <div 
style="page-break-before:always; page-break-after:always"><div><p>any 
blablabla characters... 

當我改變編碼窗口1252或UTF-8的結果沒有改變。 Bad pdf url http://www.permaco.ch/fileadmin/user_upload/jobs/Inserat_SeLe_EE_rev.pdf

如何解析此pdf?

回答

3

如何解析this pdf

缺點OCR它你不知道。

有問題的PDF不包含提取文本所需的信息,但未執行至少一些OCR(至少OCR'使用字體的每個字符以查找字形到字符的映射),這需要額外的庫和碼。

作爲該使用的字體的文本中提取需要

  • 要麼爲文本提取PDF規範ISO 32000-1:2008正確地指出在第9.10.2的要求包含ToUnicode CMap的 - 字體在您的文檔中使用的不是 -
  • 是使用表118中列出的其中一個預定義CMaps(Identity-H和Identity-V除外)或其後代CIDFont使用Adobe-GB1,Adobe- CNS1,Adobe-Japan1或Adobe-Korea 1個字符集 - 文檔中使用的字體不是 -
  • 是使用預定義的編碼中的一個的簡單的字體MacRomanEncoding, MacExpertEncoding,WinAnsiEncoding,或具有編碼其差異數組僅包含從Adobe標準拉丁字符集中獲取的字符名稱以及符號字體中的一組命名字符 - 文檔中使用的字體既不使用其中一種預定義編碼,也不使用差異數組中的字符名稱提到的那些選擇:使用的名稱是/0/1,...,/155

一般一個很好的第一個測試是嘗試複製使用Adobe Reader作爲多文本提取的經驗是在讀者的代碼&粘貼文本。當試圖這樣做時,你會看到你只會得到垃圾。

+0

+1很好的答案,很好的總結。 – nickb