# 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 ` | 设置日期 | 从HTML提取或当前日期 |
| `-m, --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
我的报告标题
第一章:引言
这是第一章的内容...
1.1 背景
这是小节的内容...
第二章:正文
这是第二章的内容...
```
### 元数据标签
工具会按以下优先级提取元数据:
1. 命令行参数(最高优先级)
2. `` 标签
3. `` 标签(仅用于标题)
4. 第一个 `` 标签(仅用于标题)
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功能
- 自动生成封面和目录
- 支持多种纸张尺寸和页边距设置