如何阅读Adobe Distiller工具创建的pdf文件中的文本?
我目前正在使用ABCPdf工具,我有一个代码示例来阅读pdf内容,但它只能读取由PDF PDF库创建的pdf文本:
public string ExtractTextsFromAllPages(string pdfFileName)
{
var sb = new StringBuilder();
using (var doc = new Doc())
{
doc.Read(pdfFileName);
for (var currentPageNumber = 1; currentPageNumber <= doc.PageCount; currentPageNumber++)
{
doc.PageNumber = currentPageNumber;
sb.Append(doc.GetText("Text"));
}
}
return sb.ToString();
}
我有其他pdf文件,这些文件是由Adobe Distiller创建的,上面的代码不起作用;我的意思是它返回下面似乎编码的奇怪数据:
\0\a\b\0\t\n\0\r\n\0\a\b\t\n\n\b\v\f\0\t\r\f\b\0\r\0\r\n\v\b\v\f\f\n\r\0\r\0\0\0\b\r\n\0\a\r\0\0\b\r\b\b\t\n\r\0\b\r\n\t\b\v\n\b\v\v\0\a\b\r\n\r\n\v\r\0\b\b\b\v\r\0\r\n\v\f\r\f\f\r\n !\"\"\v#\t $ %&$% $'\v\"% \0( )% ! !\"\"'*$'\r\n\t $ %&$% $'\v\"% \0( \r\n\f\f\f\f\b\f\f\f\f\a \b\b\f\f\f!\"\r\n\f\a#$\f\f\f\b\f\f\a%\a \b\b\f\a\a&\a\a' \b\a\b\r\n(\f)\f)
如何阅读Adobe Distiller工具创建的pdf文件中的文本?
可以说我可以像其他pdf一样轻松地使用我的浏览器打开这样的pdf文件。
谢谢,
答案 0 :(得分:0)
我在使用PDF方面遇到了类似的问题。我没有使用过ABCPdf,但你可能想查看iTextSharp,我已经创建了一个工具来使用之前的PDF文件提取字符串,但是如果嵌入了字体你仍然会遇到问题。如果你能够切换到iTextSharp,这里有一个关于SO的问题:
答案 1 :(得分:0)
首先要尝试使用Adobe Reader或任何其他PDF查看器从PDF复制和粘贴文本。
如果无法复制并完全粘贴文本,则可能会通过文件中的权限禁用文本提取功能。通常,PDF库会忽略权限,不会影响文本提取。
如果您可以复制并粘贴文件中的文字但看起来乱码/不正确则PDF不包含正确执行文本提取所需的一些信息。这些文件将正确显示。
如果Adobe Distiller配置为生成最小的文件,则会生成没有正确文本提取所需信息的文件。
编辑:
如果您需要将垃圾字符与有意义的文本区分开来,那么您应该实现一种测量文本可读性的算法。
有些链接:
答案 2 :(得分:0)
因此,事实上,您只是看不到一些可读的文本可能是由使用的奇怪编码引起的。 我们通常假设ASCII字符集用于编码。成像句子“Hello world”(ASCII到HEX将是:48 65 6C 6C 6F 20 77 6F 72 6C 64) 我们可以直截了当地假设“H”的含义为48,“e”的含义为65,等等。
但是想象一个工程师在做他自己的字体子集:为了编码“H”作为第一个新出现的字母,他使用00,然后是e然后01.然后句子将被编码为00 01 02 02 03 04 05 03 06 02 07
这将导致一些不可读的字符。就像通过秘密编码表编码和解码的古代秘密脚本一样。
您的问题的答案很简单:只有当您知道正确的编码向量进行重组时,您才能阅读从蒸馏器生成的文本。
答案 3 :(得分:-1)
ABCpdf可以从包含有效文本的所有PDF中提取文本。它推断空间,去连字符,剪辑到感兴趣的区域以及确保您获得的文本与您看到的文本相同所需的许多其他内容。
然而,所有这些都假设PDF有效 - 它符合PDF规范 - 它没有损坏。
文本提取问题的最常见原因是损坏的Identity编码字体。身份编码字体由字形而不是字符代码引用。这些字体包含一个ToUnicode映射,允许将字形ID转换为字符。
但是,我们有时会看到已删除此条目的文档。这意味着识别字符的唯一方法就是对文档进行OCR。
如果您在Acrobat中打开文档并复制文本,则可以自己查看。将复制的文本粘贴到记事本等应用程序中时,您将能够看到它是错误的。 ABCpdf看起来与Acrobat相同。
这些文件如此彻底和有效地破坏的事实可能是故意的。这肯定是确保没人能复制你的文本的好方法。
我编写了ABCpdf .NET文本提取,所以我应该知道。 : - )