Others

当文件转换为不支持脚本的基于图像或平面格式时,PDF 文档级 JavaScript 脚本会发生什么情况

What Happens to PDF Document-Level JavaScript Scripts When the File Is Converted to an Image-Based or Flat Format That Does Not Support Scripting

PDF JavaScript 的工作原理及其控制内容

PDF 文件可以包含 JavaScript 代码,这些代码在文档查看期间发生特定事件时执行。页面打开、页面关闭、表单字段值更改、鼠标单击按钮以及文档保存都是可以触发嵌入脚本的事件。此脚本功能支持的交互功能远远超出静态文本和图像:表单字段验证、自动日期标记、根据输入值计算总计、动态隐藏和显示文档层以及通过 Web 服务调用与外部数据源集成。

脚本检测只需几毫秒,可避免数小时的返工。

了解你失去了什么有助于做出正确的转换选择。

PDF 阅读器中的 JavaScript 引擎不是完整的浏览器 JavaScript 环境。它实现了 ECMAScript 规范的子集以及用于 PDF 文档操作的 Adobe 特定扩展。可用的 API 允许脚本读取和修改表单字段值、更改页面可见性、控制多媒体元素以及将表单数据提交到 URL。但该引擎缺乏 DOM 操作功能、完整的网络堆栈以及浏览器 JavaScript 提供的渲染控制。带有嵌入式脚本的PDF 格式 是比带有 JavaScript 的网页更加受限的环境。

尽管存在这些限制,PDF JavaScript 仍然足够强大,可以创建真正的交互式文档。贷款申请 PDF 可以在申请人输入贷款金额和利率时实时计算每月还款额。培训证书 PDF 可以在显示证书之前验证收件人的姓名是否与服务器端数据库匹配。订单可以将完整的数据直接提交到履行系统的 API。这些交互功能是 JavaScript 仍然是 PDF 规范的一部分的原因,尽管文档文件中的脚本执行存在周期性的安全问题。

WukongPDF

尝试 PDF 转图像

无需安装。直接在您的浏览器中工作。

立即开始 →

当 PDF 转换为平面图像格式时 JavaScript 会发生什么

将 PDF 转换为图像格式,无论是 PNG、JPEG、TIFF 还是通过光栅化每个页面生成的纯图像 PDF,从根本上改变了文档的性质,从交互式变为静态。转换过程将每个页面呈现为像素网格,准确捕获转换时页面的外观。每个交互元素,包括 JavaScript 脚本、表单字段、按钮、超链接、嵌入式视频和 3D 模型,都被扁平化到渲染图像中,不再作为交互对象存在。

JavaScript 代码本身不会被转换或翻译。在光栅化过程中,它会与所有其他非可视文档元素一起被丢弃。生成的图像文件不包含可执行代码、事件处理程序和任何类型的交互逻辑。无论 JavaScript 提供什么行为,无论是表单计算、验证规则还是动态内容更新,图像输出中都完全不存在。输出显示了文档在转换时所处的任何状态的快照,及时冻结且无法更改。

对于 PDF 到 Image 的转换,此 JavaScript 删除通常是有意的。当不需要或不需要交互性时,例如用于存档快照、社交媒体共享或嵌入演示文稿中,则使用图像格式文档。缺少 JavaScript 是这些环境中的一个功能,因为它消除了执行未知来源脚本的安全问题,并确保文档在每个设备和查看应用程序上呈现相同的效果。

失去 JavaScript 功能导致问题的场景

并非每次 PDF 到图像的转换都是在意识到 JavaScript 功能丢失的情况下执行的。将批量 PDF 处理为图像以进行存储优化或格式标准化的自动转换管道可能会默默地丢弃脚本和交互元素,而不会提醒操作员。将一百个 PDF 表单批量转换为基于图像的 PDF 进行存档可能会破坏每个文件的表单功能,而不会生成任何警告。

最具破坏性的场景涉及 JavaScript 提供的基本信息在静态渲染视图中不可见的文档。如果在转换之前未执行脚本以生成正确的可见状态,则带有根据用户输入有条件地显示内容的脚本的 PDF 可能会在转换后的图像中显示错误的内容状态。使用 JavaScript 根据用户的位置选择显示不同费率表的财务披露 PDF 将在转换后的图像中仅显示默认费率表,或更糟糕的是根本不显示费率表。

使用 JavaScript 进行数字版权管理的 PDF 文档尤其容易受到格式转换的影响。通过 JavaScript 强制权限限制打印、复制或编辑的 PDF 在转换为图像时会完全失去这些保护。图像版本可以不受限制地打印、复制和编辑,因为强制执行限制的 JavaScript 已不复存在。使用基于 JavaScript 的 DRM 的组织应该意识到格式转换会有效地剥夺他们的文档保护。

需要格式转换时保留交互功能

当 PDF 必须转换为另一种格式但必须保留其交互功能时,则需要不同的转换方法。目标从呈现每个页面的视觉外观转变为将交互行为迁移为支持等效功能的格式。

使用嵌入的 JavaScript 转换为 HTML 是交互式 PDF 最直接的迁移路径。 PDF 的表单字段成为 HTML 表单元素,其验证和计算脚本转换为浏览器 JavaScript。文档布局变为 HTML 和 CSS。交互行为在格式更改后仍然存在,因为源格式和目标格式都支持 JavaScript 执行。这种转换很复杂,而且很少是完美的,但它保留了基于光栅的转换所破坏的功能。

仅需要特定交互元素才能生存的文档,混合方法会保留这些元素,同时展平其余元素。将表单字段、其脚本及其视觉上下文提取到 Web 表单中,该表单将输入到处理原始 PDF 表单提交的同一后端系统中。 PDF 本身被存档为图像,而数据收集工作流程则通过 Web 表单继续进行。这种方法接受存档文档中嵌入式交互性的丢失,同时确保交互性支持的业务流程继续不间断。

如何在转换 PDF 之前检查 PDF 是否包含 JavaScript

要防止 JavaScript 意外丢失,首先要在开始转换之前了解文档是否包含脚本。大多数 PDF 查看器都提供了列出嵌入脚本的方法。在 Adobe Acrobat 中,“工具”菜单中的 JavaScript 面板显示文档中按触发事件组织的每个脚本。第三方 PDF 分析工具还可以枚举嵌入的 JavaScript 并报告哪些文档事件附加了脚本。

快速手动检查常见的 JavaScript 支持的功能也有帮助。如果 PDF 具有自动计算值的表单字段、更改页面其他部分内容的下拉列表或执行简单导航之外的操作的按钮,那么它几乎肯定包含 JavaScript。在进行任何批量转换操作之前,应标记具有这些功能的文档,以便仔细处理。

对于通过自动化管道处理大量 PDF 的组织来说,在转换阶段之前添加 JavaScript 检测步骤可以防止静默功能丢失。预检脚本可以扫描每个传入的 PDF 以查找嵌入的 JavaScript 对象,并将包含脚本的文档路由到手动审阅队列,而不是自动光栅化管道。该检测步骤基本上不花费任何处理时间,并且可以防止交互功能的不可逆转的损失。

WukongPDF 的转换工具包括预检检查,可在格式转换开始之前识别嵌入的 JavaScript,提醒您将丢失的交互式内容,以便您可以就是否继续光栅化或选择替代转换路径做出明智的决定。

在格式转换期间删除 JavaScript 的安全隐患值得从两个方向考虑。将嵌入 JavaScript 的 PDF 转换为静态图像可以消除任何恶意脚本风险以及任何合法的交互功能。具有安全意识的组织有时会故意对从外部源传入的 PDF 进行光栅化,以在文档进入内部网络之前剥离 JavaScript 和其他活动内容。从安全角度来看,删除 JavaScript 的格式转换是一种控制,而不是错误。关键是要意识到它何时发生,以便将交互性很重要的文档路由到不同的处理路径。

交互式 pdf 的长期存档最佳做法是存储原始交互式版本和扁平化存档版本。原版保留了完整的交互功能,供未来需要的用户使用。存档版本提供了格式稳定的参考副本,无论该平台是否支持 PDF JavaScript,该副本都将在任何未来的查看平台上以相同的方式呈现。双格式归档在未来可能不存在交互式 PDF 内容的运行时环境时提供保存和访问。

对于构建处理各种传入 PDF 格式的自动化文档处理管道的组织来说,在格式转换之前合并 JavaScript 检测和路由步骤可以防止在未经检查的情况下对交互式文档进行光栅化时发生的无声数据丢失。检测步骤需要花费几毫秒的处理时间。手动重建丢失的交互功能会花费数小时或数天的时间。

将可编写脚本的 PDF 转换为静态图像格式是不可逆的操作,应谨慎执行,而不是作为批量转换管道的意外副作用。当 PDF 中的 JavaScript 提供文档用户所依赖的功能时,未经事先检查的格式转换在功能上等同于数据丢失,应像文档处理工作流程中任何其他不可逆数据转换一样严肃对待。

WukongPDF

尝试 PDF 转图像

无需安装。直接在您的浏览器中工作。

立即开始 →