iTextSharp 和多语言 PDF:解决非英语文本提取问题
从多语言 PDF 中提取文本可能很棘手。 iTextSharp 虽然对英文文本有效,但常常难以处理非英文字符,从而导致文本损坏或丢失。让我们来看看这个问题及其解决方案。
问题:非英文字符乱码
一种常见的情况是尝试使用 iTextSharp 从 PDF 中提取波斯语或阿拉伯语文本。 该代码对于英语可以正确运行,但非英语字符会显得混乱或不完整。
根本原因:编码错误
核心问题在于.NET框架中如何处理和编码字符串。 .NET 字符串本质上是 Unicode。 不必要的编码转换会导致数据损坏。
有问题的代码片段通常如下所示:
<code class="language-csharp">currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.UTF8.GetBytes(currentText)));</code>
这种多重编码转换过程就是问题的根源。
解决方案:简化编码
解决方案非常简单:删除冗余的编码转换行:
<code class="language-csharp">currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.UTF8.GetBytes(currentText)));</code>
通过消除这一行,原始的 Unicode 表示形式被保留。 此外,请确保您的应用程序支持 Unicode 并且您使用的是最新的 iTextSharp 版本。
编码之外:文本顺序注意事项
虽然解决编码可以修复字符损坏,但它并不能解决潜在的文本顺序问题。从右到左的语言(如阿拉伯语和希伯来语)可能会在 PDF 中以相反的顺序呈现。 正确处理这个问题需要额外的解析逻辑来适当地重新排列文本。
以上是为什么 iTextSharp 无法正确从 PDF 中提取非英文文本?的详细内容。更多信息请关注PHP中文网其他相关文章!