You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iText.PdfTextExtractor提取PDF文本时遇'BuiltIn'编码不支持错误

问题描述

在使用iText.PdfTextExtractor提取PDF文本时,仅部分PDF页面触发以下错误:

'BuiltIn' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')

已尝试在打开文件流前注册编码提供者,但问题未解决:

System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider);

完整业务代码如下:

public void ExtractFromPdf(string pdfFile, ClaimInfo claimInfo, string memberId)
{
    System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
    Encoding.RegisterProvider(provider);

    PdfReader pdfRead = new PdfReader(pdfFile);
    PdfDocument pdfDoc = new PdfDocument(pdfRead);

    for (int page = 1; page < pdfDoc.GetNumberOfPages(); page++)
    {
        string convertToText = PdfToText(pdfDoc, page);
    }
}

private string PdfToText(PdfDocument pdfDoc, int pageNo)
{
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
    return PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(pageNo), strategy);
}

错误发生在return PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(pageNo), strategy);代码行,目前无法定位到“BuiltIn”编码的相关处理逻辑,寻求解决方向。

解决思路
  • 排查问题PDF的字体编码:报错页面大概率使用了PDF内嵌的自定义“BuiltIn”编码(非系统标准编码),iText默认逻辑无法识别。可以用Adobe Acrobat等工具查看问题页面的字体属性,确认编码映射规则。
  • 实现自定义编码处理:创建继承自System.Text.Encoding的自定义编码类,重写GetString等核心方法,结合PDF中内嵌的字符映射表完成字符转换,然后通过Encoding.RegisterProvider注册这个自定义提供者。
  • 升级iText版本:部分旧版iText对非标准编码的兼容性较差,尝试升级到最新稳定版,新版本可能已经补全了这类编码的处理逻辑。
  • 更换文本提取策略:替换SimpleTextExtractionStrategy为LocationTextExtractionStrategy,或者自定义提取策略,在提取流程中增加编码异常的兼容分支。
  • 异常捕获与降级处理:在调用PdfTextExtractor.GetTextFromPage时添加try-catch块,捕获编码相关的ArgumentException,对出错页面尝试OCR识别(先转图片再提取文本),或者跳过无法正常提取的内容。

内容的提问来源于stack exchange,提问作者TryingMyBest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:50:29