使用C#的PDF Pig提取PDF文本时出现固定模式乱码的修复方案咨询
C#中使用PDF Pig提取PDF文本时的固定模式乱码修复方案咨询
我目前在做一个功能:用PDF Pig提取用户上传PDF里的文本,用来减少手动录入的工作量。大部分格式规范的PDF都能正常提取,但有一定比例的PDF提取后文本全是乱码,而且这些乱码的模式非常固定——比如本该是Veridian Homes Job Schedule的内容,提取后会变成sĞƌŝĚŝĂŶ,ŽŵĞƐ:Žď^ĐŚĞĚƵůĞ,所有这类损坏PDF的乱码规律都完全一致。
我的文本提取代码
using UglyToad.PdfPig; using UglyToad.PdfPig.Content; using UglyToad.PdfPig.DocumentLayoutAnalysis.TextExtractor; string fileName = "fileName"; string fullText = ""; var filePath = "path"; using (var doc = PdfDocument.Open(filePath)) { foreach (Page page in doc.GetPages()) { string pageText = ContentOrderTextExtractor.GetText(page); fullText += pageText; } } string path = @"C:\Users\mry10\Downloads\" + fileName + ".txt"; File.WriteAllText(path, fullText); Console.WriteLine("Wrote to " + fileName);
已尝试的解决思路
- 切换多种编码格式转换乱码文本,但没有任何效果
- 参考了PDF Pig相关讨论里提到的UTFUnknown方案,但没能成功实现对应的转换
- 考虑过用Tesseract OCR替代文本提取,但OCR本身有一些实现上的问题,而且文本提取理论上应该比OCR更快更准确,所以优先想解决这个编码乱码的问题
- 知道有第三方PDF修复工具,但从当前的工作流来看,无法提前对用户上传的PDF做预处理
想请教的问题
- 有没有标准的方法可以修复这种固定模式的乱码?
- 如果没有标准方案,因为乱码的字符映射关系是固定的,我考虑过手动做字符映射转换,但感觉这种方法不够优雅,有没有更合理的实现方式?




