从PDF中删除所有文本

时间:2013-11-24 16:00:20

标签: pdf itextsharp

我有一组包含扫描图像的PDF,然后进行了OCR扫描。文本仍然以“图形方式”显示 - 换句话说,扫描的图像文本仍然存在 - 并且OCR的文本是“图像后面”。这允许搜索文档,复制文本等。

由于OS X中存在令人讨厌(现已解决)的错误,因此某些OCR文本已损坏。因此,我想删除PDF中的文本,然后重新OCR文档。出于许多非常重要的原因,我不想将“将文档重新打印为PDF”路线:我宁愿尽可能地尝试就地修复文档。

由于我找不到能够完成我要求的PDF实用工具,并且我有一些编码经验,所以我决定卷起袖子并尝试将一些.NET( C#)代码删除文本。

我查看了iTextSharp,我可以打开一个示例文档,但是我遇到的问题是找到(并因此删除)文档中的文本。我查看了各种不同的PDF规范文档,我很快就迷路了,我在iTextSharp中看到的所有示例都涉及向文档添加对象,图形或文本。

总而言之,我想要做的就是找到所有文本块并将其删除,同时单独留下图形(原始JPG)图像。任何人都可以告诉我我应该寻找的对象类型,以及我应该迭代的层次结构,以实现这一目标吗?

3 个答案:

答案 0 :(得分: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

这将流转换为文本格式,在那里我发现使用(blah)Tj和[blah] TJ并完全将它们剪掉,然后转换回压缩二进制文件。 pdftk做了一些魔术来修复输出,使其再次有效,因为原始未编辑的输入也是一个有效的PDF文件,但编辑后却没有。如果没有一些新的模式,这将不适用于扩展字符。

答案 1 :(得分:0)

在Apple Preview中打印pdf似乎会将OCR作为副作用删除。投入Apple Script,您就拥有了自动化解决方案。

答案 2 :(得分:0)

可以在以下位置看到很长的答案https://unix.stackexchange.com/questions/171940/how-can-i-convert-a-scanned-pdf-with-ocred-text-to-one-without-ocred-text#answer-181644

我的简短直接答案是:

好吧,至于我在这里回答的第一个问题(我在这里花了很多时间在寻找答案),我使用的是ubuntu 18.04,我OCRd是一个pdf文件。看起来还不错,但是有图片。 。显然,我(也许还有您)所使用的ocr建议添加一层文本,以便您可以在文件中搜索文本... https://github.com/coherentgraphics/cpdf-binaries <-答案所必需的二进制文件!

因此,在对文件进行OCRd处理后,我将cpdf二进制文件与以下命令配合使用:

  

“ cpdf-草稿./MySourcePDF.pdf -o MyFinalPdf.pdf”

...来自文档:

“-draft选项可从文件中删除位图(摄影)图像,以便可以用更少的墨水打印。可选地,可以添加-boxes选项,在空白处填充一个斜线框,表示图像是。这不能保证在所有情况下都是完全可见的(位图可能已被矢量对象部分覆盖或在原始图像中裁剪了)。例如:

  

cpdf-草稿-boxes in.pdf -o out.pdf ...”

所以我没有使用-boxes选项。之后,我只是使用LibreOffice Drawer打开了文件并导出为PDF。实际上,您可以在那里做更多的事情。希望我能帮助别人,不要再经历我今天所做的事情:8个小时为与我共享生命的人修复 OCR PDF 文件...

我最终开始尝试使用LibreOffice打开PDF,但是过程进行得很迅速,PC无法使用。