2011-07-05 40 views
2

我想使用PDF lib删除PDF中的隐藏空间。如何使用pdflib删除PDF中的字符

当我在PDF中提取一个单词“Gregor”时,它会以“Gregor”的形式出现,但我真的希望它像“Gregor”。

这可能是什么原因?或者,我怎样才能避免这些“隐藏的空间”?

+3

很酷听到。顺便说一句,你也有问题吗? –

+1

@phresnel - 这甚至不好笑。你不能从标题和内容中解释问题是“如何”?这个问题没有授予许多内容,但它明显是什么。这很容易被忽视,但英语可能不是这个人的第一语言,说实话,我认为这里至少可以探索更多信息。 –

+0

@Kieren Johnstone:我想说的是:标题应该是一个小小的总结,而不是内容的一部分。想象一下,你在不知道标题的情况下看电影,然后由于缺少标题而无法理解电影。在其他一些论坛上,我偶然不知道发生了什么事情,然后才意识到参与者滥用内容放置后的标题。 –

回答

1

逐行阅读pdf,将“Gregor”改为“Gregor”。

+0

你可以提供一些细节吗? – ImadArif

4

许多年前,我曾在Adobe的Acrobat 1.0及更高版本工作过。当时,我编写了搜索,突出显示和复制粘贴的工具。我会尽力解释你为什么会看到你所看到的以及为什么你可能也是SOL(除非你想破解PDF库),你为什么要可能是

在PDF中,页面内容由类似于PostScript的RPN语言程序表示。它的不同之处在于它不是图灵完整的。它缺少循环,合理的函数定义,递归等 - 从而避开了令人讨厌的暂停问题。典型的页内容节目看起来像这样:

255 0 0 sc 72 72 m 144 72 l 144 144 l 72 144 l f 

这意味着,颜色设置为红色(255 0 0),移动到(72,72),线路连接到(144,72),等并最终填补路径。这将创建一个红色正方形,其左下角一英寸位于页面底部1英寸的上方和右侧。

现在,当您使用文本时,它会更复杂一些。有四个操作符可以绘制文本,Tj,'和TJ,它们在应用操作符之前或之后对文本的位置有着不同的影响,但在理性的世界中,您会希望文档具有某些东西像这样的内容流中:

BT 72 288 Td (Gregor) Tj ET 

这意味着开始的文字,将文字位置(72,288),将文本“格里”,并结束文本

可能的,这是没有的。相反,您的文档可能看起来更像这样:

BT 72 288 Td (Gre) Tj --stuff-- 88 288 Td (gor) Tj ET 

其中--stuff--是零个或多个其他PDF运算符。 PDF是页面描述语言,而不是文本文件格式。因此,PDF不会规定如何为创建页面布置内容流。事实上,有无数种方法来生成等同/相同的页面。

因此,任何旨在从PDF文档中提取文本的代码块的作者应该花费一些时间来非常清楚地回答“What is a word?”这个问题。如果这个问题没有得到很好的回答,那么你就不会有任何合理的文本提取。虽然我不明确,但我高度怀疑pdflib对单词的定义是“来自文本放置运算符的任何空格分隔的子字符串”。这个定义会让你有80%的选择。也许更多,但不多。这是一个几乎无法实现的定义,但如果单词没有用单个文本放置操作符来规定,它将会失败。哎呀,甚至还有一些PDF页面,其中的文本不会放在任何接近阅读顺序的地方。例如,troff(至少用于)首先布置所有纯文本,然后是斜体文本,然后是粗体文本。

然后,你必须以不同的方式思考问题。如果将一个词定义为一个在物理空间上彼此接近并且大小相似的有序字形序列,该怎么办?然后你会发现这个定义将完全包含前一个定义的成功案例,并且正确地包含了前面“what is a word”定义中固有的大量以前的失败。您还发现代码中该定义的实际执行是显着更困难。虽然第一个定义可以在大约一个小时的时间内完成,但这个定义更像是几个星期或几个月的时间才能真正适合,因为您必须回答“什么是近距离?”这样的问题。和“什么是相似的大小?”而当你处于这种状态时,你需要考虑文本编码,连字,可选连字符,沿曲线放置的文本等其他内容(当Acrobat能够在地图中查找单词时,我无法告诉你我有多幸福)。

因此,您应该从中得出的结论是,从PDF中提取文本不是微不足道的,您应该期望来自平凡编写代码的大量失败。

+0

我所有的+1都属于你,先生!非常有趣。 – viraptor

0

我强烈建议你看看PdfTextStream。他们完成了基金会职位所描述的辛勤工作。

http://www.snowtide.com/

他们的目标是在最自然的(什么是人类读者会想到一个词是)一词的定义。