使用iText7 8.0.4提取PDF文本抛出异常,求解决方法
解决iText7提取PDF文本时的“'>' not expected”异常
问题原因
该异常说明目标PDF文件存在语法不规范或局部损坏,iText的PDF解析器在文件指针39747位置遇到了不符合PDF规范的'>'符号,导致解析中断。
解决方案
1. 启用iText的PDF修复模式
初始化PdfReader时通过ReaderProperties开启自动修复选项,让iText尝试修正PDF中的格式问题:
MemoryStream pdfStream = ... pdfStream.Position = 0; // 配置修复属性 var readerProps = new ReaderProperties() .SetUnethicalReading(true) .SetFixBrokenPdf(true); var reader = new PdfReader(pdfStream, readerProps); using var pdfDocument = new PdfDocument(reader); var strategy = new LocationTextExtractionStrategy(); for (int i = 1; i <= pdfDocument.GetNumberOfPages(); ++i) { var page = pdfDocument.GetPage(i); var text = PdfTextExtractor.GetTextFromPage(page, strategy); // 处理提取到的文本 }
SetUnethicalReading(true):绕过部分PDF的权限限制标记(部分损坏PDF会误触发该标记)SetFixBrokenPdf(true):开启iText的自动修复损坏PDF功能
2. 切换文本提取策略
如果修复模式无效,尝试使用逻辑更简单的SimpleTextExtractionStrategy,对不规范PDF兼容性更好:
var strategy = new SimpleTextExtractionStrategy(); var text = PdfTextExtractor.GetTextFromPage(page, strategy);
3. 提前修复PDF文件
若上述方法仍失败,先用第三方工具(如Ghostscript)预修复PDF,再用iText提取。示例Ghostscript命令:
gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/original 目标文件.pdf
修复后使用原代码读取repaired.pdf即可。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

