![清理 pdftotext 字体问题](https://linux22.com/image/1258762/%E6%B8%85%E7%90%86%20pdftotext%20%E5%AD%97%E4%BD%93%E9%97%AE%E9%A2%98.png)
我正在pdftotext
制作 PDF 文档的 ASCII 版本(使用 LaTeX 制作),因为合作者更喜欢 MS Word 中的简单文档。
我看到的纯文本版本看起来不错,但仔细检查后发现,f 字符似乎经常根据后面的字符而错误转换。例如,fi 和 fl 似乎经常变成一个特殊字符,我将尝试在此处粘贴:fi 和 fl。
清理 pdftotext 输出的最佳方法是什么?我认为sed
可能是正确的工具,但我不确定如何检测这些特殊字符。
答案1
默认情况下,pdftotext
输出 unicode (UTF-8) 数据。如果您的终端或文本编辑器不支持 UTF-8,那么连字符(例如“fi”和“fl”(在 unicode 中可以表示为单个字符)将会出现奇怪的效果,正如您所注意到的。
简单的解决方法是pdftotext
输出 ASCII 而不是 unicode:
pdftotext -enc ASCII7 input.pdf output.txt
这应该会产生干净的 ASCII 输出,无需您事后手动清理。
答案2
假设您使用某种基于 Unix 的系统,您可以在 pdftotext 的输出上运行此命令:
sed -i -e 's/ffi/ffi/g' -e 's/fi/fi/g' -e 's/ff/ff/g' -e 's/fl/fl/g' -e 's/ffl/ffl/g' output.txt
这应该会将连字符替换为它们分解成的单个字母。(请参阅我上面的评论,了解连字符与此有何关系。)
我在通过 LaTeX 生成的 PDF 生成的文本文件上测试了这一点pdftotext
。它运行良好。但如果 LaTeX 使用带有附加连字符的非标准编码或字体,则可能需要做更多工作。
您可能需要确保终端中使用的字体具有 f 系列连字符。DejaVu Sans Mono 是一个不错的选择。