用于取消隐藏PDF中隐藏文本的PostScript代码

时间:2015-03-29 16:31:36

标签: pdf postscript

我的PDF中包含一些隐藏文字。

当我按[CTRL+a]时,我会在文档查看器中看到隐藏的文字。

我也可以复制文本,我可以通过pdftotext提取文本,但是我无法重新着色文本,因此我可以在不按[CTRL+a]的情况下查看PDF查看器中的隐藏文本。

所以我有了这个想法,我可以使用PostScript并更改此文本对象的颜色。

但是,如何确定设置颜色的功能或隐藏文本?

2 个答案:

答案 0 :(得分:2)

您不能使用PostScript来实现您想要的效果。您需要手动编辑PDF文件...


基本上有三种方法可以“隐藏”文字:

  • 它可以是白色(或任何颜色)白色文本(或与文本相同的颜色)背景。
  • 它可以被另一个物体覆盖,比如白色区域或图像。
  • 可能正在使用文字渲染模式3 "3 Tr")。

前两个案例我不会在这里解释,因为它们不太可能。对于第三种情况,您可以这样继续:

  1. 使用 qpdf 在PDF中解压缩尽可能多的压缩'stream',创建qpdf调用< em>'QDF模式'的PDF:

    qpdf --qdf --object-streams=disable input.pdf uncompressed.pdf
    
  2. 在优秀的文本编辑器中打开uncompressed.pdf,例如VIm。

  3. 搜索序列3 Tr (文本呈现模式3在PDF-1.7规范中描述为“既不填充也不描述文本(不可见)。”

  4. 将其更改为1 Tr2 Tr并保存文件 (文本呈现模式1是“笔划文本”,模式2是“填充,然后是笔划文本。”模式1将仅显示轮廓...

  5. 重新压缩文件:

    qpdf uncompressed.pdf input-modified.pdf
    
  6. 在您喜欢的PDF查看器中打开新文件input-modified.pdf。它现在应该显示“未隐藏”文本。


  7. 更新

    从OP(通过私人频道)收到带有“隐藏”文字的PDF文件样本后,我现在可以确认隐藏确实是通过使用白色文本颜色(RGB白色)实现的。

    使这样的文字可见:

    1. 使用qpdf --qdf --object-streams=disable in.pdf unpacked.pdf

    2. 打开PDF包装
    3. 搜索所有1 1 1 rg1 1 1 RG。这些将RGB颜色设置为白色(第一个非描边,第二个用于描边操作)。

    4. 未压缩PDF文件的QDF版本中的注释àla%%Contents for page N:将指示颜色设置有效的页面。 注意 ,可能会多次出现rgRG运算符,每个运算符设置不同(或相同)下一个绘图操作的颜色。)

    5. 现在用黑色替换白色,用0 0 0 rg0 0 0 RG覆盖找到的匹配项。这不是一次完成,而是一个接一个地执行,并在保存更改后观察相应页面上的更改。 (如果已经在黑色背景上,您可能希望避免将白色文本绘制为黑色!)

答案 1 :(得分:1)

首先,PDF中的隐藏文本是使用文本渲染模式而不是颜色完成的。文本呈现模式3是“既不笔画也不填充”。因此,如果这是文本的绘制方式,更改颜色将无济于事。当然,我们无法判断这是否是如何绘制文本(但我怀疑它是),因为您尚未公开PDF文件。几乎在所有情况下,如果您想讨论特定文件,最好的办法就是将其公开。

其次,你不能使用PostScript来改变PDF文件(好吧,你可以写一个PostScript程序来解释PDF文件,但这很难......)