删除嵌入在pdf中的javascript打印代码

时间:2014-04-04 15:46:09

标签: javascript pdf

我有一台生成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对象或类似的东西?

谢谢。

4 个答案:

答案 0 :(得分:7)

由于PDF已进行检查以确保内容长度在某些点未发生变化,因此您无法添加或删除字符。但你可以改变它们。您可以这样更改:

<</S/JavaScript/JS(this.print\(true , 0,this.numPages-1,false\);\r)>>

到这个

<</S/JavaScript/JS(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r)>>

例如。

答案 1 :(得分:2)

简单方法:

  1. 使用记事本++或类似的编辑器打开文件。
  2. 找到触发打印对话的javascript代码。您可以 使用编辑器的查找对话框(ctl + f)并使用字符串 “ this.print”。其余代码可能会在文档之间变化。
  3. 选择JS指令括号内的所有字符,并计算字符数。例如

    / JS( this.print({bUI:true,bSilent:false,bShrinkToFit:true});

    请参阅附件图片1

  4. 将括号内的所有内容替换为确切数量的分号。例如

    / JS( ;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;

  5. 保存文档。

答案 2 :(得分:1)

使用Windows上的Foxit Reader,您可以将文档打印为PDF,并且生成的PDF不再具有Javascript操作。

答案 3 :(得分:1)

@SakthiSureshAnand正在寻找我使用的代码/库。确实没什么特别的,但我想我把它留在这里。

一个简单的php脚本请求原始文件,然后我们以字符串的形式获取文件的内容:

然后用preg_replace替换不需要的打印代码并将推荐的文件写入磁盘。

$fileString = file_get_contents('source.pdf');

$pdf = preg_replace(
  '%(<</S/Javascript/JS\()(.*;)(.*)%i',
  '<</S/Javascript/JS(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r)>>',
  $fileString
);


//Do what you want with the fixed $pdf string.

希望能帮助别人。

相关问题