# html2pdf **Repository Path**: jakHall/html2pdf ## Basic Information - **Project Name**: html2pdf - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-23 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTML2PDF - 专业的PDF报告生成器 一个强大的命令行工具,将HTML文件转换为专业的PDF文档,支持自动生成封面、目录和页码。 ## 功能特性 - ✅ **自动封面生成** - 从HTML元数据提取标题、作者等信息生成专业封面 - ✅ **智能目录生成** - 自动提取章节标题并生成带页码的目录 - ✅ **多纸张尺寸** - 支持A4、A3、Letter、Legal等多种标准纸张尺寸 - ✅ **自定义页边距** - 灵活设置页边距,支持统一或分别设置 - ✅ **精确页码计算** - 基于实际渲染结果计算章节页码 - ✅ **横向/纵向** - 支持横向和纵向打印 - ✅ **元数据提取** - 自动从HTML中提取标题、作者等信息 - ✅ **命令行友好** - 简洁直观的命令行界面 ## 安装 ```bash # 克隆项目 git clone cd html2pdf # 安装依赖 npm install # 或使用 yarn yarn install ``` ## 快速开始 ### 基本用法 ```bash # 将HTML文件转换为PDF(自动生成输出文件名) node src/cli.js input.html # 指定输出文件名 node src/cli.js input.html output.pdf # 使用 npm script npm start -- input.html output.pdf ``` ### 完整选项 ```bash node src/cli.js input.html output.pdf \ --size A4 \ --title "我的报告" \ --author "张三" \ --date "2024-01-23" \ --margin "40,50,40,50" \ --landscape \ --debug ``` ## 命令行选项 | 选项 | 说明 | 默认值 | |------|------|--------| | `` | 输入的HTML文件路径(必需) | - | | `[output]` | 输出的PDF文件路径(可选) | 基于输入文件名生成 | | `-s, --size ` | 纸张尺寸 (A4, A3, Letter, Legal等) | A4 | | `--no-cover` | 不生成封面页 | 生成封面 | | `--no-toc` | 不生成目录页 | 生成目录 | | `-a, --author ` | 设置作者 | 从HTML提取或Unknown | | `-t, --title ` | 设置标题 | 从HTML提取或文件名 | | `-d, --date <date>` | 设置日期 | 从HTML提取或当前日期 | | `-m, --margin <margin>` | 页边距(单位:像素) | 40 | | `--landscape` | 横向打印 | 纵向 | | `--debug` | 调试模式 | 关闭 | ### 页边距格式 - 单个值:`--margin 40` (所有边相同) - 四个值:`--margin "40,50,40,50"` (上、右、下、左) ### 支持的纸张尺寸 **国际标准 (ISO 216)** - A0, A1, A2, A3, A4, A5, A6, A7 - B0, B1, B2, B3, B4, B5 - C4, C5, C6 **北美标准** - Letter, Legal, Tabloid, Ledger, Executive **自定义尺寸** - 使用格式:`WIDTHxHEIGHT`(毫米) - 例如:`--size "210x297"` ## HTML 文件格式 为了让工具正确提取元数据和生成目录,建议按以下格式编写HTML: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="title" content="我的报告标题"> <meta name="author" content="作者姓名"> <meta name="date" content="2024-01-23"> <title>我的报告标题

第一章:引言

这是第一章的内容...

1.1 背景

这是小节的内容...

第二章:正文

这是第二章的内容...

``` ### 元数据标签 工具会按以下优先级提取元数据: 1. 命令行参数(最高优先级) 2. `` 标签 3. `` 标签(仅用于标题) 4. 第一个 `<h1>` 标签(仅用于标题) 5. 默认值 ## 使用示例 ### 示例1:基本转换 ```bash node src/cli.js examples/report.html ``` ### 示例2:指定输出文件 ```bash node src/cli.js examples/report.pdf examples/report.pdf ``` ### 示例3:自定义选项 ```bash node src/cli.js examples/report.html output.pdf \ --size A4 \ --author "李四" \ --title "年度报告" \ --margin "50,50,50,50" ``` ### 示例4:不生成封面和目录 ```bash node src/cli.js simple.html output.pdf --no-cover --no-toc ``` ### 示例5:横向A3纸张 ```bash node src/cli.js presentation.html output.pdf --size A3 --landscape ``` ## 开发 ### 项目结构 ``` html2pdf/ ├── bin/ │ └── html2pdf # 可执行文件(可选) ├── src/ │ ├── cli.js # 命令行接口 │ ├── PDFGenerator.js # PDF生成核心 │ ├── PaperSizes.js # 纸张尺寸计算 │ ├── TemplateEngine.js # 模板引擎 │ └── utils/ │ ├── Validator.js # 输入验证 │ ├── metadata-extractor.js # 元数据提取 │ ├── file-utils.js # 文件操作工具 │ └── Utils.js # 通用工具 ├── package.json └── README.md ``` ### 运行测试 ```bash npm test ``` ### 调试模式 使用 `--debug` 选项查看详细的错误信息: ```bash node src/cli.js input.html --debug ``` ## 依赖项 - **puppeteer** - 无头浏览器,用于HTML渲染和PDF生成 - **pdf-lib** - PDF文档操作和后期处理 - **commander** - 命令行参数解析 - **chalk** - 终端颜色输出 - **ora** - 加载动画 - **cheerio** - HTML解析和元数据提取 - **fs-extra** - 文件系统操作增强 ## 常见问题 ### 1. 生成的PDF页码不准确 页面布局复杂可能导致页码计算偏差。可以尝试: - 调整CSS样式,确保标题有足够的上边距 - 使用 `--debug` 选项查看详细信息 - 检查HTML中是否有影响布局的元素 ### 2. 中文字体显示问题 工具默认使用系统字体。如需自定义字体,修改 `PDFGenerator.js` 中的CSS样式: ```css body { font-family: '你的字体', 'SimSun', 'Microsoft YaHei', sans-serif; } ``` ### 3. 内存不足 处理大文件时可能遇到内存问题。可以: - 增加 Node.js 内存限制:`node --max-old-space-size=4096 src/cli.js input.html` - 分批处理大文档 ### 4. Puppeteer 下载失败 Puppeteer 需要下载 Chromium 浏览器。如遇问题: ```bash # 设置镜像源 PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors npm install ``` ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request! ## 作者 min ## 更新日志 ### v0.0.1 (2024-01-23) - 初始版本发布 - 支持基本的HTML转PDF功能 - 自动生成封面和目录 - 支持多种纸张尺寸和页边距设置