我有一个生成PDF的服务器,我没有权限或能够更改服务器上的设置.
当服务器生成pdf时,它会将以下javascript代码嵌入到文件中,这样当任何PDF阅读器/查看器打开它时,PRINT DOCUMENT屏幕将自动打开.这非常不方便且令人沮丧.
一开始文件中的代码如下所示:
%PDF-1.4
%âãÏÓ
1 0 obj
<</S/JavaScript/JS(this.print\(true , 0,this.numPages-1,false\);\r)>>
endobj
3 0 obj
<</Length 10/Filter/FlateDecode>>stream
xœ+ä
SNIP
我认为删除javascript行并防止弹出自动打印屏幕将是一件容易的事.
我试过这个(只是做了一个字符串搜索并替换并删除了第4行).这会停止出现打印屏幕 - 但是当在几个PDF查看器(goodreader等)中打开时,会立即标记为损坏的PDF.
我可以单击修复选项,一切正常,但我想知道,有什么我可以用一些NOOP代码替换javascript代码,以防止文件损坏同时仍然阻止打印页面?
这是源文件的链接:https://www.dropbox.com/s/kziy6evi57cfhb3/2014-04-04_EIKY.pdf(800k)
有没有办法取消pdf对象或类似的东西?
谢谢.
由于PDF已进行检查以确保内容长度在某些点未发生更改,因此无法添加或删除字符.但你可以改变它们.您可以像这样更改它:
<</S/JavaScript/JS(this.print\(true , 0,this.numPages-1,false\);\r)>>
Run Code Online (Sandbox Code Playgroud)
对此
<</S/JavaScript/JS(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r)>>
Run Code Online (Sandbox Code Playgroud)
例如.
小智 6
最简单的方法:
选择JS指令括号内的所有字符并统计字符数。例如
/JS ( this.print({bUI:true,bSilent:false,bShrinkToFit:true}); )
见附图1
将括号内的所有内容替换为精确数量的分号。例如
/JS( ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; )
保存文档。