# html2pdf
**Repository Path**: huangyu_li/html2pdf
## Basic Information
- **Project Name**: html2pdf
- **Description**: 完美保真 HTML 转 PDF 工具,高度还原
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-14
- **Last Updated**: 2026-05-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# html2pdf: HTML 转 PDF 服务 (离线部署版)
基于 Python + Playwright + FastAPI,使用真实 Chromium 内核渲染,完美还原网页样式(Flexbox、Grid、JS 图表渲染及现代 CSS),并通过 HTTP API 提供转换服务。
## 一、环境准备
```bash
# 安装依赖
uv sync
# 离线安装 Chromium 内核(参考下方 二、离线安装 Chromium)
# 安装系统级图形库依赖
uv run playwright install-deps chromium
# 安装中文字体
sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei -y
```
## 二、离线安装 Chromium 内核
### 1. 手动下载内核包
在有网络的电脑上下载 Playwright 指定版本的 Chrome 压缩包:
[chrome-linux64.zip](https://cdn.playwright.dev/builds/cft/147.0.7727.15/linux64/chrome-linux64.zip)
将 `chrome-linux64.zip` 上传到 Linux 服务器。
### 2. 部署
```bash
mkdir -p ~/.cache/ms-playwright/chromium-1217
unzip chrome-linux64.zip -d ~/.cache/ms-playwright/chromium-1217/
chmod +x ~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome
touch ~/.cache/ms-playwright/chromium-1217/INSTALLATION_COMPLETE
rm chrome-linux64.zip
```
> Chromium 版本号可通过环境变量 `CHROMIUM_VERSION` 覆盖,默认为 `1217`。
## 三、启动服务
```bash
uv run app.py
# 或指定端口
uv run uvicorn app:app --host 0.0.0.0 --port 8000
```
## 四、API 接口
### GET /api/health
健康检查。
### POST /api/convert/zip
上传 zip 包,返回包含所有 PDF 的 zip 包。
**zip 包格式要求:**
```
archive.zip
├── index.html # 主页面
├── report.html # 其他页面
├── css/
│ └── style.css # 样式文件
├── js/
│ └── app.js # 脚本文件
└── images/
└── logo.png # 图片资源
```
所有 .html/.htm 文件(包括子目录)会被分别转换为对应的 PDF,并保持原有目录结构。HTML 文件中通过相对路径引用的资源(CSS、JS、图片)均可正常加载。
**请求参数 (multipart/form-data):**
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|--------|------|
| file | file | 是 | - | .zip 文件 |
| page_format | string | 否 | A4 | 页面格式 (A4, Letter 等) |
| margin_top | string | 否 | 10mm | 上边距 |
| margin_bottom | string | 否 | 10mm | 下边距 |
| margin_left | string | 否 | 10mm | 左边距 |
| margin_right | string | 否 | 10mm | 右边距 |
| print_background | bool | 否 | true | 是否保留 CSS 背景 |
| wait_timeout | float | 否 | 1.0 | 页面加载后额外等待秒数 |
**示例:**
```bash
curl -X POST http://localhost:8000/api/convert/zip \
-F "file=@archive.zip" \
-F "page_format=A4" \
-o converted_pdfs.zip
```
### POST /api/convert/url
将在线 URL 转换为 PDF 并直接返回 PDF 文件。
`url` 必须带有 `http://` 或 `https://` 协议前缀。
```bash
curl -X POST http://localhost:8000/api/convert/url \
-F "url=https://example.com" \
-o output.pdf
```
## 五、命令行模式
`main.py` 保留为简单的 CLI 演示入口:
```bash
uv run main.py
#
```
## 六、配置
| 环境变量 | 默认值 | 说明 |
|----------|--------|------|
| CHROMIUM_VERSION | 1217 | Playwright Chromium 内核版本号 |