# PDF文档生成系统

企业文档自动化处理平台 — 为中国出海企业生成海牙认证所需的多语种PDF文档。

## 快速开始

### 1. 安装依赖

- **PHP 7.4+**（扩展: sqlsrv, pdo_sqlsrv, zip, gd）
- **LibreOffice** — Word转PDF
- **Ghostscript** — PDF操作
- **SQL Server** — 数据库
- **Python 3.x** — 图片处理脚本

```bash
composer install
cd python && pip install -r requirements.txt
```

### 2. 配置环境

```bash
cp .env.example .env
# 编辑 .env 填入数据库凭证和API密钥
```

### 3. 初始化

```bash
sqlcmd -S localhost -U sa -P password -i database/EPRHaiyaProcessingTasks.sql
```

## 使用方式

```bash
# 异步队列处理器（推荐）
php task/queue_processor.php             # 交互式模式
php task/queue_processor.php --daemon    # 守护进程模式
php task/queue_processor.php --help      # 查看帮助
```

## 生成的PDF文档顺序

### 标准流程（非香港公司，身份证）
1. 海牙授权书-西语版
2. 海牙授权书-英语版
3. 收信授权书-西语版
4. 收信授权书-英语版
5. 企业信用报告-原件
6. 企业信用报告-西语翻译
7. 营业执照-原件
8. 营业执照-西语翻译
9. 身份证正反面-原件
10. 身份证正反面-西语翻译

### 护照流程（非香港公司，护照类型）
1-8同上 → 9. 护照正反面PDF（跳过OCR和翻译）

### 香港公司流程
生成授权书（1-4）；跳过信用报告和营业执照的下载/OCR/翻译；**SpecsName=1（包装法）/2（包装法+VAT）时查册文件必填**（需含 'Company Particulars' 或 '公司资料' 关键词的 PDF），原件与西语翻译件在授权书之后合并。

## 项目结构

```
src/          核心源代码（37个类文件）
config/       配置文件
database/     数据库脚本
task/         队列处理器
scripts/      工具脚本和测试
python/       Python图片处理脚本
docs/         完整文档
template/     Word模板（需要准备）
output/       PDF输出（自动创建）
temp/         临时文件（自动创建）
logs/         日志文件（自动创建）
```

## 核心功能

- Word模板处理（`{{placeholder}}` 占位符替换）
- Word转PDF（LibreOffice）
- 图片转A4尺寸PDF（`python/image_to_pdf.py`，Pillow实现）
- PDF文件合并
- 身份证/护照自动处理（OCR + 翻译）
- 营业执照类型翻译（映射表 + DeepL自动回退）
- SQL Server数据库集成
- 异步队列处理器
- 企业微信通知

## 外部服务

| 服务 | 用途 |
|------|------|
| 腾讯云OCR | 身份证识别 |
| 百度OCR | 信用报告识别 |
| 阿里云OCR(云市场) | 香港公司CR/BR识别 |
| 腾讯云COS | 云存储（可选） |
| Volcano/DeepL | 翻译服务 |

## 测试

```bash
php scripts/test_hk_ocr.php                 # HK OCR功能测试
php scripts/test_baidu_general_ocr.php      # 百度OCR功能测试
php scripts/test_cr_br_template.php          # CR/BR模板处理测试
php scripts/test_cr_421_diagnose.php        # CR/BR OCR 421诊断(图片最长边>8192px)
```

## 文档

| 文档 | 说明 |
|------|------|
| [DOCUMENTATION_INDEX.md](docs/DOCUMENTATION_INDEX.md) | 文档导航索引 |
| [QUICK_REFERENCE.md](docs/QUICK_REFERENCE.md) | 常用命令速查 |
| [QUEUE_PROCESSOR_README.md](docs/QUEUE_PROCESSOR_README.md) | 队列处理器完整指南 |
| [PDF_ID_CARD_SUPPORT.md](docs/PDF_ID_CARD_SUPPORT.md) | 身份证/护照处理说明 |
| [ENV.md](docs/ENV.md) | 环境变量说明 |
| [WECHAT_NOTIFICATION.md](docs/WECHAT_NOTIFICATION.md) | 企微通知配置 |
| UNIFIED_API_DESIGN.md（本地参考，不入库） | 统一接口设计（含 `es_hague_api.php`/`es_030_api.php` 公共API，见 §13）；主副本在 app_withdrawn 项目 `docs/UNIFIED_API_DESIGN.md` |

## 常见问题

| 问题 | 解决方案 |
|------|----------|
| LibreOffice未找到 | 检查 `config/config.php` 中的路径 |
| 数据库连接失败 | 验证 `.env` 中的凭证 |
| PDF合并错误 | 安装Ghostscript |
| OCR识别失败 | 检查腾讯云API凭证 |
| 香港CR/BR OCR返回421 | 图片最长边>8192px(阿里云multiBlicenseHk限制)；`HKCompanyOCR::ensureDimensionLimit`已约束≤8000px。排查用 `scripts/test_cr_421_diagnose.php` |
| 信用报告解析失败（登记机关为空/未知区县） | 先跑 `php scripts/diagnose_credit_report_finding.php [订单号]` 排查附件查找是否选错文件（附件组可能混入营业执照PDF），再跑 `php scripts/diagnose_credit_report_authority.php` 看OCR解析 |
| 香港公司（SpecsName 1/2）报"缺少查册文件" | `php scripts/diagnose_missing_particulars.php [订单号]` 复现全链路+时间线（只读）；下载/检测/解析任一一环瞬时失败均伪装成此错误，重推可救 |
| 公共 API 受理报「文件不存在或不可访问（HTTP 403）」 | 2026-09-08 起受理即真实下载校验（香港 5 文件走 COS 签名 URL、信用报告下载+内容校验）；403 说明 URL 不可访问——检查文件 URL 有效性/COS 密钥（`TENCENT_COS_SECRET_ID/KEY`）/域名白名单 `ALLOWED_DOWNLOAD_HOSTS` |
| 生成文件报 40001 死锁（Transaction deadlocked） | vat_db 生产库禁止任何修改（DDL/数据），只能应用层重试缓解；排查跑 `php scripts/diagnose_vat_deadlock.php [订单号]`（只读） |
| Python脚本失败 | `pip install -r python/requirements.txt` |
