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

NodeJS环境下如何实现PDF转XML以满足签名API的base64要求

本地离线PDF转XML实现方案

适配需求

完全本地运行,无需上传PDF到外部服务器,无付费依赖,可直接生成符合要求的XML后转base64供签名API调用。

1. Python 实现方案

  • 依赖开源离线库pdfplumber,支持提取文本、表格、字体位置等多维度PDF信息
  • 安装命令:pip install pdfplumber
  • 代码示例:
import pdfplumber
import xml.etree.ElementTree as ET
import base64

# 本地读取PDF文件
with pdfplumber.open("target.pdf") as pdf:
    # 构造XML根节点,可根据API要求修改节点结构
    root = ET.Element("pdf_document")
    # 写入PDF基础元数据
    meta_node = ET.SubElement(root, "metadata", page_count=str(len(pdf.pages)))
    
    # 遍历所有页面写入内容
    for page_idx, page in enumerate(pdf.pages, start=1):
        page_node = ET.SubElement(root, "page", number=str(page_idx))
        # 提取页面文本,也可按需提取表格、元素坐标等信息写入
        page_text = page.extract_text()
        text_node = ET.SubElement(page_node, "content")
        text_node.text = page_text
    
    # 生成XML字符串
    xml_str = ET.tostring(root, encoding="utf-8", method="xml").decode("utf-8")
    # 转base64格式直接供API调用
    base64_xml = base64.b64encode(xml_str.encode("utf-8")).decode("utf-8")

2. Node.js 实现方案

  • 依赖开源离线库pdf2json,无外部网络请求
  • 安装命令:npm install pdf2json xmlbuilder2
  • 代码示例:
const PDFParser = require("pdf2json");
const { create } = require('xmlbuilder2');

const pdfParser = new PDFParser();
// 本地加载PDF文件
pdfParser.loadPDF("./target.pdf");

pdfParser.on("pdfParser_dataReady", pdfData => {
    // 构造XML结构,可根据API要求调整节点规则
    const root = create({ version: '1.0' })
        .ele('pdf_document')
            .ele('metadata', { page_count: pdfData.Pages.length }).up();
    
    // 写入页面内容
    pdfData.Pages.forEach((page, index) => {
        const pageNode = root.ele('page', { number: index + 1 });
        // 拼接页面文本内容
        const pageContent = page.Texts.map(textItem => decodeURIComponent(textItem.R[0].T)).join(' ');
        pageNode.ele('content').txt(pageContent);
    });

    // 生成XML字符串
    const xmlStr = root.end({ prettyPrint: true });
    // 转base64格式直接供API调用
    const base64Xml = Buffer.from(xmlStr).toString('base64');
});

特殊场景说明

  • 如果签名API要求XML符合特定规范(比如XAdES签名标准结构),需要对应调整上述代码中的XML节点结构,补充API要求的元数据字段。
  • 如果是扫描版PDF,可搭配离线OCR库tesseract本地识别文本后再生成XML,无需上传外部服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:04