2013-11-24 51 views
1

我有一组包含扫描图像的PDF文件,这些文件然后被OCR了。文本仍然以“图形”显示 - 换句话说,扫描的图像文本仍然存在 - 并且OCR文本“在图像后面”。这允许搜索文档,复制文本等。删除PDF中的所有文本

由于OS X中存在一个令人讨厌(现在已解决)的问题,某些OCR文本已损坏。因此,我想从PDF中删除文本,然后重新OCR文档。对于许多不平凡的原因,我不想停下“将文档重新打印为PDF”路线:我宁愿尽量尝试修复文档。

因为我找不到一个PDF实用程序来完成我所要求的功能,而且我有一些编码经验,所以我决定卷起袖子尝试敲击一下.NET。 (C#)代码来删除文本。

我已经看过iTextSharp,我可以打开一个示例文档,但是我卡住的地方是找到(并因此删除)文档中的文本。我查看过各种不同的PDF规格文档,而且我很快就会迷失方向,而且我看过的iTextSharp的所有示例都处理向文档添加对象,图形或文本的问题。总而言之,我想要做的就是找到所有的文本块并将其删除,同时只留下图形(最初的JPG)图像。任何人都可以告诉我,我应该寻找什么样的对象类型,以及我应该迭代哪个层次结构来实现这个目标?

+2

看到这篇文章:http://stackoverflow.com/a/12687519/231316。尽管iTextSharp没有任何直接的内置帮助程序,但它是完全可能的。您需要熟悉PDF语法,并基本上阅读文档并选择想要保留和/或删除的内容。我做了类似的工作,但是布鲁诺指出,有许多边缘案例需要注意。如果你的文本总是在一个专门的OCG“层”上,那么你也许可以使用http://stackoverflow.com/a/17718641/231316 –

回答

1

改编此How to find and replace text in a existing PDF file with PDFTK (or other command line application)我能够通过使用pdftk和sed删除呈现的文本。这当然不是完全一般的,但是对我的需求是一个快速入侵。

我结束了:

pdftk my_input.pdf output - uncompress | sed -e 's/\[.*\]TJ/()Tj/' -e 's/(.*)Tj/()TJ/' | pdftk - output my_output.pdf compress 

该功能可将流为文本格式,在那里我找到(废话),TJ和[胡说] TJ的用途,只是剪断出来完全,再转换回压缩二进制文件。 pdftk会修复输出以使其再次生效,因为原始未经编辑的输入也是有效的PDF文件,但不是在编辑之后。这不适用于没有一些新模式的扩展字符。

+0

不幸的是,我得到了错误'sed:RE错误:非法字节序列 错误:无法打开PDF文件: - 遇到错误。没有输出创建。 完成。输入错误,所以没有输出创建.'。这是在OS X Mavericks上 – KenD

+0

您可以尝试处理管道的各个部分以缩小问题范围。看起来像PDF的初始解压缩失败。可能是您的PDF已损坏,或者使用了某些pdftk不支持的功能。 – robmacl