从HTML表单到可交互PDF:dompdf.js表单导出与AcroForm字段完全指南
【免费下载链接】dompdf.jsHTML to PDF in the browser — one line of code for selectable, searchable vector PDFs (10,000 pages). Pure frontend: zero backend, zero runtime deps. TypeScript over a Rust WebAssembly engine; an html2canvas/jsPDF alternative.项目地址https://gitcode.com/gh_mirrors/do/dompdf.js点击查看免费下载为什么需要 dompdf.js 表单导出dompdf.js是一个纯前端的 HTML 转 PDF 引擎基于 TypeScript Rust WebAssembly无需后端即可在浏览器里生成可搜索、可选择文字的矢量 PDF。除了普通内容导出它还提供了一套完整的表单导出能力把页面上的 input、select、checkbox、radio、textarea 等控件转换成可填写的 AcroForm 字段或保留为静态外观——导出的 PDF 打开后收件人依然可以直接点击勾选、在下拉框里选择、在文本框中打字。 相比 html2canvas 截图式方案dompdf.js 导出的表单字段是真实的 PDF 表单对象而不是看起来像表单的图片。3 分钟上手导出 HTML 表单为 PDF安装后只需在导出选项里加一个form配置即可。默认是static静态模式import dompdf from dompdf.js; const blob await dompdf(element, { format: a4, pagination: true, form: { mode: hybrid }, // 静态外观 可交互字段 });完整配置项与更多示例见官方文档 README.md 的 Form Export 章节TypeScript 类型定义位于 src/snapshot.tsexport type FormMode static | interactive | hybrid; export interface FormOptions { mode?: FormMode; include?: FormInclude[]; }仓库中的 examples-main/demo1.html 页面内置了一个包含姓名输入框、邮箱、复选框、单选按钮、下拉框和文本域的完整表单演示npm run serve启动后可以直接体验导出效果。3 种表单导出模式对比static、interactive 与 hybridform选项接受boolean | FormOptions三种模式的行为如下模式静态外观视觉还原可交互 AcroForm 字段适用场景static默认✅❌只读归档、打印件、审批留痕interactive❌✅纯表单类 PDF如报名单、申请表hybrid✅✅兼顾所见即所得与可填写推荐大多数场景几个容易踩的点⚠️form: true仍然只是默认的 static 模式。想要可填写字段必须显式写mode: interactive或mode: hybrid。⚠️ 表单值来自导出那一刻的 DOM 状态el.value、el.checked而不是 HTML 里的初始属性——用户改了再导出PDF 里就是改过的值。⚠️ 复选框和单选按钮在interactive模式下会省略底层静态图形只渲染 PDF 表单控件本身避免双重绘制。哪些 HTML 控件能生成可填写的 PDF 字段并非所有控件都有自然的 PDF 表单映射。当前 src/snapshot.ts 中的映射逻辑如下✅ 可生成 AcroForm 交互字段HTML 控件生成的 PDF 字段类型文本类inputtext、email、search、password…/Tx文本字段textarea/Tx文本字段select含全部 option 选项/Ch下拉选择字段checkbox/Btn按钮Yes/Off 状态radio同名分组/Btn按钮多个选项作为子字段️ 仅保留静态外观不产生交互字段日期时间类date、time、month、week、datetime-local其他range滑块、color取色器、file文件选择、progress进度条、meter仪表盘这些控件会以截图式的静态视觉呈现保证 PDF 里长得和页面一样。用 include 白名单控制要导出的控件类型include选项是一个白名单支持以下 11 种类型定义见 src/snapshot.tstext · textarea · select · checkbox · radio · date-time · range · color · file · progress · meter不在白名单里的控件会被完全忽略。典型用法form: { mode: hybrid, include: [text, textarea, select, checkbox, radio], } 小技巧如果页面上有调试用的滑块、颜色选择器等不想出现在 PDF 里的控件把include收窄到真正需要的几项即可输出更干净。深入原理生成的 PDF 里到底发生了什么在 wasm/src/paginate.rs 中可以看到Rust 引擎为每个可交互控件写入 PDF 规范定义的Widget 注释文本类控件生成/FT /Tx字段携带当前值/V、默认值/DV输入框的占位提示符会写入/TUtooltip并根据 CSStext-align计算文本对齐/Qselect生成/FT /Ch字段option列表整体写入/Opt当前选中项写入/V复选框/单选项生成/FT /Btn同组 radio 合并为一个父字段加多个子 Widget所有顶级字段汇总到根对象的/AcroForm字典并设置NeedAppearances true让 PDF 阅读器在字段被填写时自动重新排版外观。正是这套标准 AcroForm 结构使得 Acrobat、Chrome 内置 PDF 阅读器、预览类 App 都能识别并允许用户直接填写表单——这与encrypt选项里的annot-forms权限配合使用若希望收件人可填写记得在userPermissions中保留该权限见 README.md 的 PDF Encryption 章节。常见问题排查FAQ1. 导出的 PDF 里输入框没有值确认导出时机值读取的是 DOM 实时状态。若表单是动态渲染的SPA、异步填充请等数据写入 input 后再调用导出。2. 设了form: true为什么还不能填写true等价于 static 模式请改用form: { mode: interactive }或hybrid。3. 日期、滑块、取色器为什么不是可交互的PDF 规范没有与之对应的字段类型它们只保留静态外观。如需交互可在页面上把它们替换为文本输入框例如input typetext手填日期。4. 复选框在 PDF 里显示的是框标签还是纯框interactive/hybrid 模式下复选框与单选项只渲染为 PDF 表单控件本身标签文字保留不会出现重复的图形。小结dompdf.js 的表单导出把HTML 表单和PDF AcroForm打通了static保真截图式外观适合归档interactive/hybrid生成真实的 AcroForm 字段收件人可在 PDF 阅读器中直接填写include白名单让你精确控制哪些控件参与导出文本、下拉、复选框、单选四类控件可交互日期、滑块、文件等保留静态视觉。配合 README_CN.md 中的字体嵌入中文表单必配、页眉页脚、水印与加密等能力纯前端就能产出一份专业、可交互的 PDF 表单文档。赞分享【免费下载链接】dompdf.jsHTML to PDF in the browser — one line of code for selectable, searchable vector PDFs (10,000 pages). Pure frontend: zero backend, zero runtime deps. TypeScript over a Rust WebAssembly engine; an html2canvas/jsPDF alternative.项目地址https://gitcode.com/gh_mirrors/do/dompdf.js点击查看免费下载相关推荐使用 pdfminer.six 提取 PDF AcroForm 交互式表单字段从文档目录到字段值的完整实战指南使用 pdfminer.six 提取 PDF AcroForm 交互式表单字段从文档目录到字段值的完整实战指南 本文以 pdfminer.six 的官方 Ho后端使用PDFMiner.six提取PDF中的交互式表单字段AcroForm教程使用PDFMiner.six提取PDF中的交互式表单字段AcroForm教程 前言 PDF文档中的交互式表单AcroForm是一种常见的表单类型它允许后端react-admin 表单开发完全指南从 SimpleForm 到自定义表单布局与高级交互react admin 表单开发完全指南从 SimpleForm 到自定义表单布局与高级交互 导读 表单是后台管理界面中最核心的交互载体。react admi前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenRouter 平替实操:LiteLLM 把成本与链路透明度拿回来

OpenRouter 平替实操:LiteLLM 把成本与链路透明度拿回来

OpenRouter 平替实操:LiteLLM 把成本与链路透明度拿回来 【免费下载链接】litellm The fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [B…

2026/10/10 20:31:16 阅读更多 →
EgoDemo路线图前瞻:十万小时EgoSuite-Open100K将为具身智能带来什么

EgoDemo路线图前瞻:十万小时EgoSuite-Open100K将为具身智能带来什么

EgoDemo路线图前瞻:十万小时EgoSuite-Open100K将为具身智能带来什么 【免费下载链接】EgoDemo EgoSuite‑Open100K 光轮智能发布的全球首个十万小时全模态开源人类数据集 集齐头部腕部双视角、手部全身位姿、语义标注和深度信息,涵盖15,000类场景&#x…

2026/10/10 20:31:16 阅读更多 →
Java集合框架核心解析:从ArrayList到HashMap的底层原理与选型指南

Java集合框架核心解析:从ArrayList到HashMap的底层原理与选型指南

如果你去参加过Java技术面试,大概率被问过这么一句话:"ArrayList和LinkedList有什么区别?HashMap底层是怎么实现的?"Java集合框架几乎是后端开发绕不过去的门槛,也是"八股"里出镜率最高的内容。但…

2026/10/10 20:30:16 阅读更多 →

最新新闻

太阳能电池板YOLO高变焦检测:24577张数据集训练实战

太阳能电池板YOLO高变焦检测:24577张数据集训练实战

简介:面向太阳能光伏板检测与YOLO模型训练的实际需求,这份压缩包针对高变焦太阳能电池板图像场景,提供了带有标签的光伏板检测标注数据集,能帮助开发者和研究人员快速获得规范标注样本,降低从图像采集、清洗到标注的重…

2026/10/11 0:31:53 阅读更多 →
GANMaster人脸矫正实战:从模糊脸到公安标准证件照

GANMaster人脸矫正实战:从模糊脸到公安标准证件照

简介:本资源是一份面向深度学习初学者与计算机视觉实践者的GAN人脸生成与矫正实战教程,聚焦生成对抗网络原理落地与Python代码实现。资源包含4个核心文件(2个Python脚本、1份Markdown说明文档、1份LICENSE),总大小仅9K…

2026/10/11 0:31:53 阅读更多 →
FCOM参考PDF解析:从性能表到插值函数的工程化指南

FCOM参考PDF解析:从性能表到插值函数的工程化指南

简介:这是一份面向飞行机组、飞行学员及航空爱好者的FCOM(飞行操作手册)参考指南,聚焦B737机型日常运行中的关键操作程序与处置规范。内容涉及驾驶舱区域分工、起降标准动作、着陆后刹车冷却表查算、放行与天气及杰普逊资料认读、…

2026/10/11 0:31:52 阅读更多 →
Spring Boot实战:智慧养老院管理系统的架构设计与权限控制

Spring Boot实战:智慧养老院管理系统的架构设计与权限控制

从需求到落地:我如何用Spring Boot搭起一套智慧养老院管理系统去年年初接手了一个养老院管理系统的开发任务,机构那边的情况比较典型:三百多张床位,护理人员几十号人,老人的健康档案还停留在纸质登记,家属想…

2026/10/11 0:31:52 阅读更多 →
端侧AI导览实战:鸿蒙+蓝耘MaaS的离线多模态落地

端侧AI导览实战:鸿蒙+蓝耘MaaS的离线多模态落地

1. 项目概述:这不是一个App,而是一次端侧AI能力的现场压力测试“鸿蒙AI:国庆我在故宫用了把‘AI 导游’”——这个标题里藏着三个被大众忽略但极其关键的信号:时间(国庆)、空间(故宫&#xff09…

2026/10/11 0:31:52 阅读更多 →
PLC动态加密功能块实战:S7-1200/1500程序防复制与授权管理

PLC动态加密功能块实战:S7-1200/1500程序防复制与授权管理

干自动化这些年,最扎心的场景不是现场调试到凌晨,而是设备刚交出去半年,就发现客户厂里多了一台和你做的设备一模一样的机器,运行逻辑连定时器参数都没改。S7-1200/1500 在国内项目里太常见,上载、反编译、复制项目的门…

2026/10/11 0:30:51 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →