# Requirement Specification / 需求规格说明

# pdf-bundle

## Background / 背景

l-tool CLI 需要 PDF 处理能力。用户经常需要将多个图片或 PDF 文件合并为一个 PDF 文档，例如将扫描的多页文档整合、将照片打印成册等场景。本功能提供灵活的合并选项，支持纸张规格、方向、排序和旋转等参数。

## Goals / 目标

- [x] 实现多图片/PDF 合并为单个 PDF 功能
- [x] 支持纸张规格设置 (A4/Letter/Legal)
- [x] 支持页面方向设置 (Portrait/Landscape)
- [x] 支持文件排序方式 (None/Name)
- [x] 支持页面旋转角度 (全局或单文件)

## Scope / 范围

### In Scope / 范围内

- 支持多种图片格式输入 (PNG, JPG, JPEG, WebP, GIF, TIFF, BMP, ICO, QOI, PNM, TGA, HDR, EXR, FF, AVIF)
- 支持 PDF 文件输入
- 支持通过 -i 参数多次指定输入文件
- 支持通过 --dir 参数批量添加目录下的文件
- 支持单文件旋转角度 (path:angle 格式)
- 支持全局旋转角度 (--rotate 参数)
- 图片自动缩放适应页面，居中显示，保留边距

### Out of Scope / 范围外

- PDF 拆分功能
- PDF 加密/解密
- PDF 水印功能
- 自定义纸张尺寸
- 自定义页边距

## Constraints / 约束条件

- 依赖 printpdf crate 生成 PDF
- 依赖 lopdf crate 合并 PDF
- 依赖 image crate 处理图片
- 输出文件如已存在会被覆盖

## Acceptance Criteria / 验收标准

- [x] `l pdf bundle -i image1.png -i image2.jpg -o output.pdf` 能正确合并图片
- [x] `l pdf bundle --dir ./images -o output.pdf` 能正确合并目录下所有支持的文件
- [x] `l pdf bundle -i photo.jpg:90 -o output.pdf` 能正确旋转单个文件
- [x] `l pdf bundle -i a.pdf -i b.pdf -o merged.pdf` 能正确合并 PDF 文件
- [x] `--paper a4/letter/legal` 参数生效
- [x] `--orientation portrait/landscape` 参数生效
- [x] `--sort none/name` 参数生效
- [x] `--rotate` 全局旋转参数生效

## Implementation / 实现

- **文件**: `src/commands/pdf/bundle.rs`
- **命令**: `l pdf bundle -i <INPUT>... [-o OUTPUT] [--dir DIR] [--paper PAPER] [--orientation ORIENT] [--sort SORT] [--rotate ANGLE]`
- **参数**:
  - `-i, --input`: 输入文件，可多次使用，支持 "path" 或 "path:angle" 格式
  - `-o, --output`: 输出文件路径，默认 l-tool-pdf-bundle.pdf
  - `--dir`: 目录模式，收集目录下所有支持的文件
  - `--paper`: 纸张规格，可选 a4/letter/legal，默认 a4
  - `--orientation`: 页面方向，可选 portrait/landscape，默认 portrait
  - `--sort`: 排序方式，可选 none/name，默认 name
  - `--rotate`: 全局旋转角度 (90, 180, 270)
- **状态**: ✅ 已完成

## Open Questions / 待澄清问题

- (无)
