Csharp/C#教程:iTextSharp库不从我的文件中提取文本分享


iTextSharp库不从我的文件中提取文本

iTextSharp库(版本5.5.5)不从我的文件中提取文本。 我可以将pdf中的文本复制并粘贴到记事本中。 我将文件上传到此链接。

源代码非常简单,适用于其他pdf文件,但对于这个有问题的文件,我得到的是一些没有任何意义的字符。

var text = string.Empty; using (var file = new File.OpenRead(path)) { using (var reader = new PdfReader(file)) { for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++) { text += PdfTextExtractor.GetTextFromPage(reader, pageNumber); } } } 

任何帮助都非常感谢。

示例PDF中亚洲字体的PDF声明不包含ToUnicode映射,以允许从字符代码映射到Unicode。

此外,它们的编码是Identity-H ,它是一种伪编码,因为它只是将0到65,535之间的2字节字符代码映射到相同的2字节CID值,因此这仍然没有定义可用的固定编码用于文本提取。

Identity-H实际上可以仅使用任何RegistryOrderingSupplement值与CIDFonts一起使用,并且这些ROS值传达实际的编码信息,从中可以导出到Unicode的映射。 您的文件就是这种情况。

为了在文本提取期间使用这些ROS值,iText需要一组资源文件来定义不同预定义ROS值的映射。 由于这些文件非常庞大,它们不是标准iText主发行版jar / dll的一部分,但必须作为单独的jar / dll文件添加到类路径中。

我只使用Java版本的iText测试了这个,因为我对它更熟练。

iText 5.x / Java

这个jar工件的5.x版本的Maven坐标:

  com.itextpdf itext-asian 5.2.0  

(由于近年来这些资源没有任何变化,自5.2.0以来没有5.x版本。)

在我将jar添加到类路径后,我可以成功从PDF中提取亚洲字符。 他们是否100%正确,我不能说因为我无法阅读它们。

iTextSharp 5.x / .Net

应该有类似的iTextSharp DLL与亚洲字体资源。 (我发现了iText 7的变体,但我不确定它是否适用于5.x iTextSharp。)

Googl’ing周围发现了一些iTextAsian-*iTextAsianCmaps-*iTextAsian-all-*文件……但我不知道哪一个可以使用当前的iTextSharp 5.5.12。

随着OP的发现,还需要为iTextSharp注册DLL(与iText / Java相比):

以下是如何通知iTextSharp亚洲dll在项目中。 您需要添加您的文本提取类的静态构造函数:

 static PdfDocument() { iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsian.dll"); iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsianCmaps.dll"); } 

我还添加了@mkl给出的答案。 以下是如何通知iTextSharp亚洲dll在项目中。 您需要添加您的文本提取类的静态构造函数:

上述就是C#学习教程:iTextSharp库不从我的文件中提取文本分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 static PdfDocument() { iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsian.dll"); iTextSharp.text.io.StreamUtil.AddToResourceSearch("iTextAsianCmaps.dll"); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951057.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐