删除嵌入在pdf中的javascript打印代码
Removing javascript print code embedded in pdf
我有一台生成PDF的服务器,我无法访问或无法更改服务器上的设置。
当服务器生成 pdf 时,它会将以下 javascript 代码嵌入到文件中,以便当任何 PDF 阅读器/查看器打开它时,打印文档屏幕会自动打开。这是非常不方便和令人沮丧的。
文件开头的代码如下所示:
%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查看器(好阅读器等)中打开时,会立即标记为损坏的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)>>
对此
<</S/JavaScript/JS(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'r)>>
例如。
简单的方法:
- 使用记事本++或类似的编辑器打开文件。
- 查找触发打印对话框的 JavaScript 代码。您可以使用编辑器的查找对话框 (CTL+F) 并使用字符串"这个.print"。代码的其余部分可能会因文档而异。
-
选择 JS 指令括号内的所有字符并计算字符数。
例如/JS (this.print({bUI:true,bSilent:false,bShrinkToFit:true});)
见附图1
-
将括号内的所有内容替换为确切数量的分号。
/JS (
;;; 保存文档。
@SakthiSureshAnand正在寻找我使用的代码/库。这真的没什么特别的,但我想我会把它留在这里。
一个简单的 php 脚本请求原始文件,然后我们以字符串形式获取文件的内容:
然后preg_replace我用来替换不需要的打印代码并将 admed 文件写入磁盘。
$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.
希望对某人有所帮助。
使用Windows上的Foxit Reader,您可以将文档打印为PDF,并且生成的PDF不再具有Javascript操作。
- JavaScript打印功能使日历停止工作
- 如何用javascript打印php数组
- 打开抽屉的Javascript打印命令
- JavaScript-打印元素值
- 直接使用html5或javascript打印
- system.err风格的控制台以javascript打印
- 无法使用JavaScript打印带有for循环的验证错误
- 使用Javascript打印图像
- chrome在通过javascript打印时要求登录
- 在SharePoint中通过javascript打印
- JavaScript打印的数字有20位小数
- 使用Javascript打印HTML:未定义错误
- 使用javascript打印元素
- 使用 JavaScript 打印 PDF
- Javascript 打印多个网页 iFrame 内容(全部打印按钮)
- 如何使用嵌套循环使用 Javascript 打印到外部循环的输出中
- JavaScript:打印前 12 个月 - “March”打印两次
- Javascript:打印类属性
- 如何使用 javascript 打印带上划线的文本
- 通过 Javascript 打印在 IFrame 中加载的 PDF