pdfmake

关注
义项:JavaScript PDF生成库
pdfmake

pdfmake是纯 JavaScript 编写的 PDF 文档生成库,可在浏览器(客户端)和 Node.js(服务端)两种环境中运行,以声明式的文档定义对象描述文档结构与内容。[1] 开发者无需手工计算元素的坐标位置,只需给出内容、样式和表格等声明,库本身负责换行、分页与页面布局。 它基于 pdfkit 构建,采用 MIT 许可证发布,是 JavaScript 生态中常见的数据驱动排版方案之一。[2]

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程

定义

pdfmake是一个用纯 JavaScript 编写的 PDF 文档生成库,既能运行在浏览器中,也能运行在 Node.js 服务端。[1] 它的核心思路是声明式排版:使用者提供一个称为文档定义对象(document-definition-object)的 JavaScript 对象,在其中描述文档的内容、样式与页面参数,由库负责计算位置并输出 PDF 文件。

该库基于另一个 JavaScript PDF 库 pdfkit 开发,源码以 MIT 许可证开放,文档站点与源码仓库分开维护。[2] 在浏览器端使用时,通常需要同时引入库文件和一份虚拟文件系统形式的字体定义文件,默认内置 Roboto 字体。[3]

原理

pdfmake采用声明式而非命令式的排版模型。使用其他一些 PDF 库时,开发者往往需要调用类似 writeText(text, x, y)、moveDown 这样的命令手工指定每段文字的位置;pdfmake则让使用者只描述内容与样式,把坐标计算交给内部的布局引擎。 文档定义对象中最基本的键是 content,其值可以是一个字符串,也可以是由段落、表格、列表、图片、画布等节点组成的数组或嵌套结构。

文档定义对象还包含若干并列的配置项:styles 用于定义可复用的样式字典并支持样式继承,header 与 footer 用同一套语法描述页眉页脚,background 用于设置每页的背景层,pageSize、pageOrientation、pageMargins 控制页面尺寸、方向与页边距,info 则写入标题、作者、主题等 PDF 元数据。 页眉页脚既可以是静态内容,也可以传入函数,依据当前页码、总页数和页面尺寸动态生成;表格支持自动宽度、固定宽度、星号宽度与百分比宽度,并支持列合并、行合并,以及跨页时自动重复表头。[1]

布局完成后,客户端通过 createPdf 方法得到文档生成器,再调用 download、open、print 等方法完成下载、新窗口打开或打印,也可以取回数据链接、Base64 字符串、Buffer 或 Blob 形式的二进制结果。 在 0.3 版本中,虚拟文件系统的字体数据改为在使用前一次性注册到 pdfmake 实例上,而不再随 createPdf 调用传入。[4]

发展历程

pdfmake的源码仓库位于代码托管平台 GitHub,由 bpampuch 发起并与 liborm85 等人共同维护,早期版本可在 npm、Bower、Packagist 等多个软件包仓库中获取。[5] 项目先后形成 0.1.x、0.2.x 和 0.3.x 三条主要分支:0.1.x 与 0.2.x 长期作为稳定版本使用,0.3.x 曾以 beta 形式发布较长时间后才转为正式版本。[6]

0.3.0 于 2026 年 1 月 1 日发布,相较 0.2.21 有多项不兼容改动:代码回到原始 pdfkit 包而不再使用 @foliojs-fork 分支,代码库迁移到 ES6 以上语法,客户端与服务端接口统一,原本接收回调的方法改为返回 Promise,客户端虚拟字体存储的引入方式也发生变化。[7] 该版本同时放弃对 Internet Explorer 11 的支持,并将 Node.js 的最低支持版本提高到 20 LTS。[7]

0.3 系列此后的版本继续增添功能并修补问题。0.3.5 为列加入蛇形排列(snakingColumns)属性以形成报纸式分栏,并为文本节点增加大纲与书签(outlines)相关属性;0.3.4 为表格单元格加入垂直对齐;0.3.6 增加外部地址访问策略设置方法,用以限制下载字体或图片时允许访问的域名。[8]

参考资料

  1. pdfmake [引用日期2026-10-14]
  2. Packagist The PHP Package Repository [引用日期2026-10-14]
  3. Client-side [引用日期2026-10-14]
  4. pdfmake upgrade notice (0.2 → 0.3) [引用日期2026-10-14]
  5. README [引用日期2026-10-14]
  6. pdfmake on NPM [引用日期2026-10-14]
  7. pdfmake 0.3.0 on Node.js NPM [引用日期2026-10-14]
  8. Changelog [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T20:39:33Z

历史版本