如何解决使用iTextSharp Core提取PDF文本时的字体问题?
问题
尝试从某政府PDF文档提取文本时触发如下错误:
PDF Extraction Error Dictionary doesn't have supported font data. iText.Kernel.Exceptions.PdfException at iText.Kernel.Font.PdfFontFactory.CreateFont(PdfDictionary fontDictionary) at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.GetFont(PdfDictionary fontDict) at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.SetTextFontOperator.Invoke(PdfCanvasProcessor processor, PdfLiteral operator, IList`1 operands) at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.InvokeOperator(PdfLiteral operator, IList`1 operands) at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.ProcessContent(Byte[] contentBytes, PdfResources resources) at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.ProcessPageContent(PdfPage page) at iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(PdfPage page, ITextExtractionStrategy strategy, IDictionary`2 additionalContentOperators) at iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(PdfPage page, ITextExtractionStrategy strategy)
已尝试Simple提取策略和Location-based提取策略,结果一致。此前从同站点其他数百份文档提取文本均无问题,无法控制该文档是否损坏。
解决方法与解释
解决方法
- 自定义字体处理逻辑:重写
PdfCanvasProcessor的字体获取方法,捕获字体解析异常时返回默认字体(如Helvetica),跳过错误继续提取。示例代码:
使用时替换默认处理器处理页面内容即可。public class CustomPdfCanvasProcessor : PdfCanvasProcessor { public CustomPdfCanvasProcessor(ITextExtractionStrategy strategy) : base(strategy) { } protected override PdfFont GetFont(PdfDictionary fontDict) { try { return base.GetFont(fontDict); } catch (PdfException) { // 用默认字体替代无法解析的字体 return PdfFontFactory.CreateFont(StandardFonts.HELVETICA); } } } - 切换PDF提取库:尝试PdfSharp、PDFBox.NET等其他库,这类库对异常字体的兼容性可能优于iText。如果文档是扫描生成的,还可以用Tesseract OCR进行光学字符识别。
- 预处理修复PDF:用Ghostscript重新生成PDF,修复字体相关的损坏问题。命令示例:
gswin64c -o fixed.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/original input.pdf
关于字体与提取策略的关联
所有文本提取策略都依赖iText底层的字体解析逻辑——PDF中的文本并非直接存储为Unicode,而是通过字体字典定义的编码规则映射为可读字符。如果字体字典缺失必要的支持数据(如字体描述、编码映射表),iText无法完成字符到文本的转换,必然抛出错误。这和具体用哪种提取策略无关,因为策略只是决定文本的组织方式,不影响底层的字符解码过程。
内容的提问来源于stack exchange,提问作者richardtallent
相关产品推荐
相关产品推荐

