You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pypdf从PDF文件中提取JavaScript脚本?

使用pypdf 4.2.0提取并迁移PDF中的JavaScript

提取PDF中的JavaScript

要提取PDF中存储在/JavaScript字典内的脚本,可通过访问PDF目录(Catalog)的对应节点实现。针对你提供的PDF脚本结构(存储在/Names数组的命名动作中),用以下代码提取:

from pypdf import PdfReader

def extract_pdf_js(pdf_path):
    reader = PdfReader(pdf_path)
    # 获取PDF目录对象
    catalog = reader.trailer["/Root"]
    
    js_scripts = {}
    # 检查目录中是否存在JavaScript字典
    if "/JavaScript" in catalog:
        js_dict = catalog["/JavaScript"]
        # 获取命名的JavaScript动作列表
        if "/Names" in js_dict:
            names = js_dict["/Names"]
            # 遍历名称-动作对(每两个元素为一组:名称 + 动作对象)
            for i in range(0, len(names), 2):
                js_name = names[i]
                action_obj = names[i+1]
                # 提取动作中的JavaScript代码
                if "/JS" in action_obj:
                    js_code = action_obj["/JS"]
                    # 处理PDF内的转义字符
                    js_code = js_code.replace("\\(", "(").replace("\\)", ")").replace("&", "&")
                    js_scripts[js_name] = js_code
    return js_scripts

调用示例:

# 提取指定PDF中的所有命名JS脚本
extracted_js = extract_pdf_js("source.pdf")
# 获取目标JSInit脚本
jsinit_code = extracted_js.get("JSInit", "")

将提取的JavaScript写入新PDF

用你已经熟悉的writer.add_js()方法,将提取到的脚本写入目标PDF:

from pypdf import PdfWriter, PdfReader

def add_js_to_pdf(source_pdf_path, target_pdf_path, js_code):
    writer = PdfWriter()
    # 读取目标PDF模板(若需新建空白PDF可跳过此步骤)
    reader = PdfReader(source_pdf_path)
    for page in reader.pages:
        writer.add_page(page)
    
    # 添加JavaScript
    writer.add_js(js_code)
    
    # 保存新PDF
    with open(target_pdf_path, "wb") as f:
        writer.write(f)

调用示例:

# 将提取到的JSInit脚本写入目标PDF
add_js_to_pdf("target_template.pdf", "output_with_js.pdf", jsinit_code)

说明

  • 上述代码适配了你提供的PDF脚本结构(命名为JSInit的JavaScript动作),若PDF内有多个命名JS脚本,extract_pdf_js函数会返回所有脚本的字典(键为脚本名称,值为代码)。
  • 代码处理了PDF内常见的转义字符,确保提取的代码可直接复用。

内容的提问来源于stack exchange,提问作者Albin Dennevi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:20:07