我正在使用Ghostscript将源PDF文件转换为PNG图像数组。在将PDF页面转换为PNG图像之前,我需要从PDF中提取(删除)所有文本,以便转换后的页面图像将包含除文本之外的所有其他元素。
我可以使用Ghostscript实现这一点,还是需要查看不同的工具?
我也会对可以读取的工具感兴趣 - 保存我的源PDF删除所有文本。
答案 0 :(得分:8)
自从我之前的回答以来,开发工作一直在继续,现在有了一个新的选项可供选择。
最新版本的Ghostscript支持3个新参数,允许您从PDF中删除所有TEXT或所有IMAGE或所有VECTOR元素。
要从输入PDF中删除所有TEXT元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf
要从输入PDF中删除所有光栅图像元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf
要从输入PDF中删除所有VECTOR元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERVECTOR input.pdf
当然,您也可以组合以上两个参数中的任何一个(组合所有三个参数将创建空白页面。
以下是PDF页面的屏幕截图,其中原始包含所有三个元素,而结果页面看起来不同。
包含"图像","矢量&和"文字"元件。子>
运行以下6个命令将创建剩余内容的所有6种可能变体:
gs -o noIMG.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf gs -o noTXT.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf gs -o noVCT.pdf -sDEVICE=pdfwrite -dFILTERVECTOR input.pdf gs -o onlyIMG.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERTEXT input.pdf gs -o onlyTXT.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE input.pdf gs -o onlyVCT.pdf -sDEVICE=pdfwrite -dFILTERIMAGE -dFILTERTEXT input.pdf
下图说明了结果:
左上角:所有"文字"删除;所有"图像"删除;所有"载体"除去。从左开始底行,:仅限"文字"保持;只有"图像"保持;只有"载体"保持子>
答案 1 :(得分:6)
只需使用文本编辑器,您就可以在没有Ghostscript的情况下实现您想要的效果。
将压缩的PDF转换为具有(几乎)所有PDF对象的PDF文件。内容和流使用 QPDF :
扩展为可读形式qpdf --qdf --object-streams=disable input.pdf editable.pdf
使用文本编辑器打开新的editable.pdf
文件(它还可以优雅地处理PDF中剩余的二进制blob,如字体或ICC资源)。
在PDF对象流中搜索TJ
和Tj
字符串(用于显示文本的PDF运算符)的所有出现,并将其更改为JT
和{{1}分别为字符串(未定义,无意义的PDF运算符)。将文件另存为jT
。
现在根据需要将edited.pdf
转换为您的PNG图片。
请注意,edited.pdf
仍会显示在大多数PDF查看器中,但文本将丢失。但是,通过恢复原始的TJ / Tj操作符,可以很容易地再次恢复文本。
我的坏!我原来的答案包含了一个错误的错字。我在应该使用 edited.pdf
的地方使用了 tj
。很抱歉可能造成的任何混淆。
澄清"对象流" 是什么......在"标准化"由上面给出的 Tj
命令创建的表单,带有流的对象通常如下所示(其中qpdf
是整数):
NNN
"图像流" 具有基本相同的结构。但关键:值对通常包含以下4个条目,按任何顺序排列(其中 NNN 0 obj
<<
% Here are the key:value pairs of the object dictionary
/Key1 somevalue1
/Key2 somevalue2
% ... (more key:value pairs)
>>
stream
% Here is the content of the object stream
endstream
endobj
, NNN
是给出宽度和高度的整数值图像的像素):
MMM
答案 2 :(得分:1)
显然这不是标准要求,但最近在IRC的#Ghostscript论坛上进行了讨论。记录频道,您可以在此处找到讨论:
http://ghostscript.com/irclogs/2014/05/21.html
我们最初建议在pdf_ops.ps中将初始文本呈现模式更改为3,但这对文件没有影响,因为它使用的是类型3字体。所以我们建议改为在同一个文件中改变TJ和Tj的定义。请查看日志中的15:37左右。