2017-04-22 51 views
0

我使用ITextSharp和列出的代碼從pdf中提取文本。 但我發現,一些行給我的不正確的結果:IText夏普從pdf提取文本與法文腳本MT

    在Excel
  1. - 「11 3 11」 在Visual Studio
  2. - 「11 \ u0085 \ u0014 \ u0016 \ u001c 3月11日」
  3. 在PDF - 「11£139 3 11」

再舉一個例子:

    在Excel
  1. - 「2 45 1」
  2. 在Visual Studio - 「2 \ u0085 \ u0019 \ u0018 \ u001b 45 1」 以PDF
  3. - 「2£658 45 1」

調查後,我發現,PDF文件包含 法國腳本-mt-58fbba579ea99.ttf

using (PdfReader reader = new PdfReader(pfile.path)){ 
StringBuilder text = new StringBuilder(); 
if (pagenum == 0) 
{ 
for (int i = 1; i <= reader.NumberOfPages; i++) 
{ 
string page = ""; 
page = PdfTextExtractor.GetTextFromPage(reader, i, new 
iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy()); 
string stringOutput = page; 
string[] lines = stringOutput.Split('\n'); 
allData.Add(lines); 
output = lines; 
} 
} 
} 

問題:

  1. 我怎樣才能補充一點,我已經裝提取策略字體?
  2. 是否可以創建映射,以便我可以將\ u0085 \ u0014 \ u0016 \ u001c轉換爲£139?
  3. 也許我錯過了一些編碼?
+0

你可以分享PDF格式的檢查嗎? excel與pdf有多相關? – mkl

+0

這裏是pdf文件的一部分(它將在線30天) [pdfFile](https://ufile.io/ce0yy) 我已經創建了PDF文件的解析器,因此我可以分析數據和結構本身,我只是使用Microsoft.Office.Interop將所有解析的文本放到Excel中。 這段法文是我工作的瓶頸。 – Vitalii

回答

0

所有以井貨幣符號的條目「£」使用而不爲PDF文本提取所需的信息字體(分別命名爲C2_0C2_2),如PDF規範ISO 32000-1中描述繪製第9.10節「文本內容的提取」:它們使用編碼Identity-H(這不意味着任何到Unicode的映射),並且沒有映射到ToUnicode映射。

用於其它條目的字體或者使用一個有意義的編碼(T1_0T1_1使用WinAnsiEncoding)或具有ToUnicode地圖(C2_1)。由於iText中的文本提取基本上遵循9.10節中的描述,因此iText無法提取這些條目的實際文本,而是返回原始字形代碼,就像Adobe Reader副本&粘貼那樣。

通常這意味着人們必須求助於OCR,無論是頁面作爲一個整體,並提取使用OCR,或有問題的字體的字符的所有文本單獨建立ToUnicode對於這些字體,然後表如上所述提取文本。

在這種情況下,雖然,C2_0C2_2嵌入字體程序本身包含信息映射包含字形爲Unicode代碼點。因此,人們還可以利用這些字體程序中的信息構建表格。這些信息可以使用字體庫從字體程序讀取,該字體庫可以處理真正的字體。

+0

嗨mkl! 非常感謝!你的答案以某種方式解決我的問題。 我將使用Adobe作爲主要工具和ITextSharp進行結構分析。 而且我會更好地創建基於Adobe輸出或任何其他OCR的解析器。 – Vitalii

+0

另外,你能分享一下你用來檢查上述信息的工具嗎? – Vitalii

+0

@Vitalii我使用了基於iText的PDF檢查工具RUPS,並且我有一份PDF規範[ISO 32000-1](http://www.adobe.com/content/dam/Adobe/en/devnet /acrobat/pdfs/PDF32000_2008.pdf)供參考。 – mkl