我的PDF中包含一些隐藏文字。
当我按[CTRL+a]
时,我会在文档查看器中看到隐藏的文字。
我也可以复制文本,我可以通过pdftotext
提取文本,但是我无法重新着色文本,因此我可以在不按[CTRL+a
]的情况下查看PDF查看器中的隐藏文本。
所以我有了这个想法,我可以使用PostScript并更改此文本对象的颜色。
但是,如何确定设置颜色的功能或隐藏文本?
答案 0 :(得分:2)
您不能使用PostScript来实现您想要的效果。您需要手动编辑PDF文件...
基本上有三种方法可以“隐藏”文字:
"3 Tr"
)。前两个案例我不会在这里解释,因为它们不太可能。对于第三种情况,您可以这样继续:
使用 qpdf 在PDF中解压缩尽可能多的压缩'stream',创建qpdf
调用< em>'QDF模式'的PDF:
qpdf --qdf --object-streams=disable input.pdf uncompressed.pdf
在优秀的文本编辑器中打开uncompressed.pdf
,例如VIm。
搜索序列3 Tr
(文本呈现模式3在PDF-1.7规范中描述为“既不填充也不描述文本(不可见)。”)
将其更改为1 Tr
或2 Tr
并保存文件
(文本呈现模式1是“笔划文本”,模式2是“填充,然后是笔划文本。”模式1将仅显示轮廓... ) 子>
重新压缩文件:
qpdf uncompressed.pdf input-modified.pdf
在您喜欢的PDF查看器中打开新文件input-modified.pdf
。它现在应该显示“未隐藏”文本。
从OP(通过私人频道)收到带有“隐藏”文字的PDF文件样本后,我现在可以确认隐藏确实是通过使用白色文本颜色(RGB白色)实现的。
使这样的文字可见:
使用qpdf --qdf --object-streams=disable in.pdf unpacked.pdf
搜索所有1 1 1 rg
和1 1 1 RG
。这些将RGB颜色设置为白色(第一个非描边,第二个用于描边操作)。
未压缩PDF文件的QDF版本中的注释àla%%Contents for page N:
将指示颜色设置有效的页面。 ( 注意 ,可能会多次出现rg
和RG
运算符,每个运算符设置不同(或相同)下一个绘图操作的颜色。)
现在用黑色替换白色,用0 0 0 rg
和0 0 0 RG
覆盖找到的匹配项。这不是一次完成,而是一个接一个地执行,并在保存更改后观察相应页面上的更改。 (如果已经在黑色背景上,您可能希望避免将白色文本绘制为黑色!)
答案 1 :(得分:1)
首先,PDF中的隐藏文本是使用文本渲染模式而不是颜色完成的。文本呈现模式3是“既不笔画也不填充”。因此,如果这是文本的绘制方式,更改颜色将无济于事。当然,我们无法判断这是否是如何绘制文本(但我怀疑它是),因为您尚未公开PDF文件。几乎在所有情况下,如果您想讨论特定文件,最好的办法就是将其公开。
其次,你不能使用PostScript来改变PDF文件(好吧,你可以写一个PostScript程序来解释PDF文件,但这很难......)