动态生成PDF全能解决方案
📥 下载渠道
📌 核心特性
- 完全免费 - 零成本部署使用
- 多场景支持 - 报告生成/网页存档/合同输出等
- 动态渲染 - 支持执行HTML中的JavaScript
🛠️ 技术架构
| 组件 | 用途说明 |
|---|---|
| Node.js | 服务端运行环境 |
| pkg | 打包为单文件可执行程序 |
| puppeteer-core | 通过本地Chrome实现HTML转PDF |
| sqlite3 | 本地运行数据存储 |
🎯 功能说明
HTML转PDF支持
- 多种输入方式:文件/URL/原始字符串
- 专业排版控制:
- 自定义页面尺寸(A4/A3/Legal等)
- 页眉页脚模板定制
- 打印样式优化
- 智能边距设置
🚀 部署支持
| 环境 | 要求说明 |
|---|---|
| Windows | 解压即用EXE,需安装Chrome浏览器 |
| Linux | 单文件可执行程序,需安装google-chrome |
| Docker | 容器化部署,docker-compose一键启动 |
⚙️ 性能优化
- 浏览器池管理 - 使用generic-pool实现:
- 实例复用(最大512次/实例)
- 智能资源回收(空闲30分钟自动释放)
- 动态扩容(1-10个实例自动调节)
📄 application.yml配置文件说明
位置说明
- 本地部署:放置于可执行文件同级目录
- Docker部署:通过volumes挂载
yaml
# 运行端口 默认 port: 15676,
port: 15676
# 认证配置
public: false # 是否开放访问,为true不校验token身份
username: # 系统账户 启动时打印在控制台,不设置则为系统默认值
password: # 系统密码 启动时打印在控制台,不设置则为系统默认值
# 会员信息
email:
appid:
# 浏览器路径配置
windowsChromePath: C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe
linuxChromePath: /usr/bin/google-chrome
# 浏览器池配置
puppeteerBrowserPool:
# 默认10 最大浏览器实例数
max: 10
# 默认1 最小浏览器实例数
min: 1
# 默认512 每一个浏览器实例 最大可重用次数,超过后将重启实例。0表示不检验
maxUses: 512
# 默认true 初始化时初始化实例
autostart: true
# 默认1800000 指定资源在连接池中保持空闲状态的最大时间(单位:毫秒)。如果资源在池中空闲的时间超过此值,它将被销毁并从池中移除。
idleTimeoutMillis: 1800000
# 默认300000 指定驱逐线程运行的时间间隔(单位:毫秒)。驱逐线程会定期检查池中资源,销毁空闲时间超过 idleTimeoutMillis 的资源。
evictionRunIntervalMillis: 300000🐳 Docker快速启动
bash
docker-compose up -d接口文档
在调用接口时需要在请求头中添加authorization请求头,值为获取token接口返回的token,有效期为7天
获取token
请求方式: POST
请求地址: /sys_auth/token
参数说明:
请求body中发送json
username和password为系统用户名和密码
可在application.yml中配置
如果不配置,则username,password为默认值,在启动时打印到控制台
| 参数 | 是否必须 | 说明 |
|---|---|---|
| username | 是 | 系统用户名 |
| password | 是 | 系统用户密码 |
请求示例:
json
{
"username": "admin",
"password": "password"
}html文件转pdf
请求方式: POST
请求地址: /html2pdf/file
参数说明: 使用multipart/form-data POST上传文件, 文件标识名为"file"
url参数中支持以下参数
margin参数特殊处理 /html2pdf/file?top=10mm&left=10mm&right=10mm&bottom=10mm
html字符串转pdf
请求方式: POST
请求地址: /html2pdf/str
参数说明: 请求body中发送json
| 参数 | 是否必须 | 说明 |
|---|---|---|
| html | 是 | html字符串 |
| pdfOptions | 否 | 查看 |
请求示例:
json
{
"html": "<!DOCTYPE html><html><body><h1>html文本转pdf</h1></body></html>",
"pdfOptions": {
"displayHeaderFooter": false,
"format": "A4",
"printBackground": true,
"preferCSSPageSize": true,
"margin": {
"top": "10mm",
"bottom": "10mm",
"left": "10mm",
"right": "10mm"
}
}
}html网页url转pdf
请求方式: POST
请求地址: /html2pdf/url
参数说明: 请求body中发送json
| 参数 | 是否必须 | 说明 |
|---|---|---|
| url | 是 | 有效html网页链接 |
| cachePage | 否 | 是否使用浏览器缓存,默认使用 |
| pdfOptions | 否 | 查看 |
请求示例:
json
{
"url": "https://www.baidu.com/",
"cachePage": true,
"pdfOptions": {
"displayHeaderFooter": false,
"format": "A4",
"printBackground": true,
"preferCSSPageSize": true,
"margin": {
"top": "10mm",
"bottom": "10mm",
"left": "10mm",
"right": "10mm"
}
}
}备注
TIP
默认pdfOptions
js
const defaultPagePdfOptions = {
displayHeaderFooter: false,
headerTemplate: undefined,
footerTemplate: undefined,
format: 'A4',
printBackground: true,
preferCSSPageSize: true,
margin: {
top: '10mm',
bottom: '10mm',
left: '10mm',
right: '10mm'
}
}📬 联系我们
技术支持邮箱: 1472912024@qq.com