IText夏普从pdf提取文本与法文脚本MT
问题描述:
我使用ITextSharp和列出的代码从pdf中提取文本。 但我发现,一些行给我的不正确的结果:IText夏普从pdf提取文本与法文脚本MT
-
在Excel
- - “11 3 11” 在Visual Studio
- - “11 \ u0085 \ u0014 \ u0016 \ u001c 3月11日”
- 在PDF - “11£139 3 11”
再举一个例子:
-
在Excel
- - “2 45 1”
- 在Visual Studio - “2 \ u0085 \ u0019 \ u0018 \ u001b 45 1” 以PDF
- - “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;
}
}
}
问题:
- 我怎样才能补充一点,我已经装提取策略字体?
- 是否可以创建映射,以便我可以将\ u0085 \ u0014 \ u0016 \ u001c转换为£139?
- 也许我错过了一些编码?
答
所有以井货币符号的条目“£”使用而不为PDF文本提取所需的信息字体(分别命名为C2_0和C2_2),如PDF规范ISO 32000-1中描述绘制第9.10节“文本内容的提取”:它们使用编码Identity-H(这不意味着任何到Unicode的映射),并且没有映射到ToUnicode映射。
用于其它条目的字体或者使用一个有意义的编码(T1_0和T1_1使用WinAnsiEncoding)或具有ToUnicode地图(C2_1)。由于iText中的文本提取基本上遵循9.10节中的描述,因此iText无法提取这些条目的实际文本,而是返回原始字形代码,就像Adobe Reader副本&粘贴那样。
通常这意味着人们必须求助于OCR,无论是页面作为一个整体,并提取使用OCR,或有问题的字体的字符的所有文本单独建立ToUnicode对于这些字体,然后表如上所述提取文本。
在这种情况下,虽然,C2_0和C2_2嵌入字体程序本身包含信息映射包含字形为Unicode代码点。因此,人们还可以利用这些字体程序中的信息构建表格。这些信息可以使用字体库从字体程序读取,该字体库可以处理真正的字体。
你可以分享PDF格式的检查吗? excel与pdf有多相关? – mkl
这里是pdf文件的一部分(它将在线30天) [pdfFile](https://ufile.io/ce0yy) 我已经创建了PDF文件的解析器,因此我可以分析数据和结构本身,我只是使用Microsoft.Office.Interop将所有解析的文本放到Excel中。 这段法文是我工作的瓶颈。 – Vitalii