我想在我的网站上提供PDF,但想防止可能不尊重正常PDF“安全性”的漫游器自动解析。原因是它也是商业发行的,我可以分享给“个人使用”,但不能以这种方式广泛使用。我最初是从Word创建PDF的。
我尝试将Ghostscript与dNoOutputFonts选项一起使用,以将文本转换为字形,但是结果却非常大(从2.5 MB到180 MB)。扰乱文本编码似乎是一个不错的选择,但是我几乎找不到任何讨论此问题的帖子。似乎有一个commercial solution,但我找不到解决办法,例如使用Ghostscript或qpdf。关于如何实现此目标(或替代解决方案)的任何建议?
操作系统:Windows 10 64bit Ghostscript的可用版本:9.18、9.27
答案 0 :(得分:2)
好吧,这就是字体的优点,您只需描述每个字符一次。转换为轮廓,您每次都需要对其进行描述,是的,更大。
Ghostscript的pdfwrite设备竭尽全力试图使文本可搜索,因为通常人们会在“可搜索”文件变为“不可搜索”时对我们大喊大叫。因此(除其他事项外)它在输入文件中保留了所有ToUnicode CMap。为了避免简单的索引编制,您需要避免这种情况。您尚未链接到PDF文件,所以我无法对其进行测试,但是....
您需要编辑三个地方:
/ghostpdl/Resource/Init/gs_pdfwr.ps,第642行,更改:
/WantsToUnicode /GetDeviceParam .special_op {
exch pop
}{
//true
}ifelse
收件人:
//false
在同一文件的第982行,更改:
/WantsToUnicode /GetDeviceParam .special_op {
exch pop
}{
//false
}ifelse
收件人:
//false
然后在/ghostpdl/Resource/Init/pdf_font.ps,第614行中,更改:
/ WantsToUnicode / GetDeviceParam .special_op { 流行音乐 } { //假 }不容易
收件人:
// false
那应该防止inptu文件中的任何ToUnicode信息传递到输出文件。根据您使用的操作系统以及Ghostscript的构建方式(您未说),您可能需要告诉Ghostscript在该目录的搜索路径中包含该目录,您可以使用-I / ghostpdl / Resource /初始化。
您还应该设置-dSubsetFonts=true
,它将所有字体作为子集发出,我认为这是默认设置,但是我不能立即回想,设置它也没有害处。这意味着遇到的第一个字形在索引1处进行编码,第二个在索引2等处进行编码。因此Hello World变为0x01、0x02、0x03、0x03、0x04、0x05、0x06、0x04、0x07、0x03、0x08。整个文件的顺序(显然)是一致的,但是文件中的每个字体和每个文件的顺序都不同。我以为那应该足够混乱了。当然,不可能简单地搜索/复制/粘贴。
如果您提供示例文件,我可以对其进行测试。
哦,对我而言,您还可以通过使用ps2write设备创建PostScript文件,然后使用pdfwrite设备将其转换回PDF来获得相同的效果。 ps2write设备无法嵌入ToUnicode CMap,因为PostScript中对此没有标准支持。当然,这也意味着内容会回退到PostScript,这可能会导致其他不可接受的质量/尺寸变化。