Pri*_*ome 8 pdf-generation ghostscript
我正在使用Ghostscript将源PDF文件转换为PNG图像数组.在将PDF页面转换为PNG图像之前,我需要从PDF中提取(删除)所有文本,以便转换后的页面图像将包含除文本之外的所有其他元素.
我可以用Ghostscript实现这个目标,还是需要研究不同的工具?
我也对一个可以读取的工具感兴趣 - 保存我的源PDF删除所有文本.
Kur*_*fle 11
自从我之前的回答以来,开发工作仍在继续,现在有了一个新的选项,这证明了一个新的答案.
最新版本的Ghostscript支持3个新参数,允许您从PDF中删除所有TEXT或所有IMAGE或所有VECTOR元素.
要从输入PDF中删除所有TEXT元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf
Run Code Online (Sandbox Code Playgroud)
要从输入PDF中删除所有光栅IMAGE元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf
Run Code Online (Sandbox Code Playgroud)
要从输入PDF中删除所有VECTOR元素,请运行
gs -o no-more-texts.pdf -sDEVICE=pdfwrite -dFILTERVECTOR input.pdf
Run Code Online (Sandbox Code Playgroud)
当然,您还可以组合以上两个参数中的任何一个(组合所有三个参数将创建空白页面.
以下是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
下图说明了结果:
从左到右的顶行:删除所有"文本"; 删除所有"图像"; 删除所有"向量".左下方,左起:只保留"文字"; 只保留"图像"; 只保留"矢量".

只需使用文本编辑器,您就可以在没有Ghostscript的情况下实现您想要的功能.
将压缩的PDF转换为使用QPDF(几乎)所有PDF对象的内容和流扩展为可读形式的PDF:
qpdf --qdf --object-streams=disable input.pdf editable.pdf
Run Code Online (Sandbox Code Playgroud)editable.pdf使用文本编辑器打开新文件(它还可以优雅地处理PDF中的任何剩余二进制blob,如字体或ICC资源).
在PDF对象流中搜索所有出现的TJ和Tj字符串(用于显示文本的PDF运算符),并将它们分别更改为JT和jT字符串(未定义的,无意义的PDF运算符).将文件另存为edited.pdf.
现在edited.pdf根据需要将您转换为PNG图像.
请注意,edited.pdf仍会在大多数PDF查看器中显示,但文本将丢失.但是,通过恢复原始TJ/Tj运算符,可以轻松地再次恢复文本.
我的错!我原来的答案包含了一个错误的错字.我曾经tj在Tj应该使用的地方使用过.很抱歉可能产生的任何混淆.
澄清"对象流"是什么......在qpdf上面给出的命令创建的"规范化"表单中,带有流的对象通常看起来像这样(其中NNN是整数):
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
Run Code Online (Sandbox Code Playgroud)
的"图像流"具有基本相同的结构.但关键:值对通常包含以下4个条目,以任何顺序排列(其中NNN和MMM是整数值,给出图像的宽度和高度,以像素为单位):
/Type /XObject
/Subtype /Image
/Width NNN
/Height MMM
Run Code Online (Sandbox Code Playgroud)
显然这不是标准要求,但最近在 IRC 上的#Ghostscript 论坛上进行了讨论。该频道已记录,您可以在此处找到讨论:
http://ghostscript.com/irclogs/2014/05/21.html
我们最初建议将 pdf_ops.ps 中的初始文本渲染模式更改为 3,但这对文件没有影响,因为它使用的是类型 3 字体。因此我们建议改为更改同一文件中 TJ 和 Tj 的定义。查看日志中的 15:37 左右。
| 归档时间: |
|
| 查看次数: |
3642 次 |
| 最近记录: |