如何将图片转换为 PDF:JPG、PNG、WebP 完整指南
为什么要将图片转为 PDF
PDF(Portable Document Format,便携式文档格式)是世界上最通用的文档格式之一。将图片转换为 PDF 有许多实际用途,从文档分享到打印归档,PDF 在某些场景下比原始图片格式更具优势。
PDF 的核心优势
| 优势 | 说明 |
|---|---|
| 跨平台一致性 | 在任何设备上显示效果完全相同 |
| 多页合并 | 将多张图片合并为一个文件 |
| 打印友好 | 精确控制页面大小和边距 |
| 文件保护 | 支持密码保护和权限控制 |
| 通用兼容 | 几乎所有设备都能打开 PDF |
| 专业形象 | 正式文档通常使用 PDF 格式 |
PDF 与图片格式对比
| 特性 | JPG | PNG | WebP | |
|---|---|---|---|---|
| 多页支持 | ✓ | ✗ | ✗ | ✗ |
| 文字搜索 | ✓(含 OCR) | ✗ | ✗ | ✗ |
| 打印控制 | ✓ 精确 | △ 有限 | △ 有限 | △ 有限 |
| 文件保护 | ✓ 密码/权限 | ✗ | ✗ | ✗ |
| 浏览器显示 | ✓ | ✓ | ✓ | ✓ |
| 编辑灵活性 | △ 有限 | ✓ | ✓ | ✓ |
| 文件大小 | 中等 | 小 | 较大 | 最小 |
适合转为 PDF 的场景
- 合同和证件:将身份证、护照、学历证书扫描件转为 PDF 提交
- 报告和方案:将设计稿、截图整理为 PDF 文档
- 照片集:将旅行照片、活动照片合并为一个 PDF 相册
- 打印需求:需要精确控制打印尺寸和布局
- 电子签名:在 PDF 上添加签名比在图片上更规范
- 邮件附件:一个 PDF 比多个图片附件更专业
如何将图片转为 PDF
使用 PicKit(推荐)
PicKit 图片转 PDF 工具 提供了最简单直观的转换体验:
- 上传图片:点击上传或拖放一张或多张图片
- 调整顺序:拖拽调整图片在 PDF 中的排列顺序
- 设置页面大小:选择 A4、Letter 或自适应
- 设置方向:纵向或横向
- 调整边距:设置页面边距
- 点击转换:工具自动生成 PDF 文件
- 下载 PDF:一键下载生成的 PDF
支持的输入格式
| 输入格式 | 说明 | 推荐用途 |
|---|---|---|
| JPG/JPEG | 有损压缩,文件小 | 照片、扫描件 |
| PNG | 无损压缩,支持透明 | 截图、带透明背景的图片 |
| WebP | 新一代格式 | 网页图片 |
| BMP | 无压缩位图 | 高质量源文件 |
| GIF | 动图格式(取首帧) | 简单图片 |
| TIFF | 专业格式 | 高质量扫描件 |
| SVG | 矢量格式 | 图标和插图 |
命令行方法
ImageMagick
ImageMagick 是最强大的命令行图片处理工具之一:
# 安装 ImageMagick
# macOS
brew install imagemagick
# Ubuntu/Debian
sudo apt install imagemagick
# 单张图片转 PDF
convert photo.jpg output.pdf
# 多张图片合并为一个 PDF
convert photo1.jpg photo2.jpg photo3.jpg merged.pdf
# 指定页面大小
convert photo.jpg -page A4 output.pdf
# 调整图片适应页面
convert photo.jpg -resize 595x842 -gravity center -extent 595x842 output.pdf
# 批量转换
for f in *.jpg; do convert "$f" "${f%.jpg}.pdf"; done
img2pdf
img2pdf 是专门为图片转 PDF 设计的 Python 工具,它的优势是不会对图片进行有损重编码:
# 安装
pip install img2pdf
# 单张图片转 PDF
img2pdf photo.jpg -o output.pdf
# 多张图片合并
img2pdf photo1.jpg photo2.jpg photo3.jpg -o merged.pdf
# 指定页面大小(A4)
img2pdf photo.jpg --pagesize A4 -o output.pdf
# 自动旋转适应页面方向
img2pdf photo.jpg --auto-orient -o output.pdf
# 批量转换
img2pdf *.jpg -o album.pdf
macOS 自带方法
macOS 无需安装任何额外工具即可将图片转为 PDF:
方法一:使用预览应用
- 用”预览”打开图片
- 文件 → 导出为 PDF
- 设置文件名和保存位置
方法二:使用打印对话框
- 用”预览”打开图片
- 文件 → 打印(或 ⌘P)
- 左下角点击”PDF”按钮
- 选择”储存为 PDF”
方法三:命令行
# 使用 sips 和 cupsfilter
sips -s format pdf photo.jpg --out photo.pdf
# 或使用 macOS 内置的 Python
python3 -c "
import Quartz
url = Quartz.CFURLCreateFromFileSystemRepresentation(None, b'photo.jpg', len(b'photo.jpg'), False)
img = Quartz.CGImageSourceCreateWithURL(url, None)
# ... 更多代码需要 Quartz 框架
"
编程方法
Python
from PIL import Image
import os
def images_to_pdf(image_paths, output_path, page_size='A4'):
"""将多张图片合并为一个 PDF"""
# A4 尺寸(300 DPI)
sizes = {
'A4': (2480, 3508),
'Letter': (2550, 3300),
}
images = []
for path in image_paths:
img = Image.open(path)
# 转换为 RGB(PDF 不支持 RGBA)
if img.mode in ('RGBA', 'LA', 'P'):
background = Image.new('RGB', img.size, (255, 255, 255))
background.paste(img, mask=img.split()[-1] if img.mode == 'RGBA' else None)
img = background
elif img.mode != 'RGB':
img = img.convert('RGB')
images.append(img)
if images:
# 第一页作为主文件,其余追加
first = images[0]
rest = images[1:] if len(images) > 1 else []
first.save(
output_path,
'PDF',
resolution=300,
save_all=True,
append_images=rest
)
print(f'已生成 PDF:{output_path}(共 {len(images)} 页)')
# 使用示例
images_to_pdf(
['photo1.jpg', 'photo2.jpg', 'photo3.jpg'],
'output.pdf'
)
Node.js
const PDFDocument = require('pdfkit');
const fs = require('fs');
const path = require('path');
async function imagesToPDF(imagePaths, outputPath) {
return new Promise((resolve, reject) => {
const doc = new PDFDocument({
size: 'A4',
margins: { top: 50, bottom: 50, left: 50, right: 50 }
});
const stream = fs.createWriteStream(outputPath);
doc.pipe(stream);
imagePaths.forEach((imgPath, index) => {
if (index > 0) doc.addPage();
const ext = path.extname(imgPath).toLowerCase();
// 计算图片在页面中的位置和大小
const pageWidth = doc.page.width - doc.page.margins.left - doc.page.margins.right;
const pageHeight = doc.page.height - doc.page.margins.top - doc.page.margins.bottom;
doc.image(imgPath, doc.page.margins.left, doc.page.margins.top, {
fit: [pageWidth, pageHeight],
align: 'center',
valign: 'center'
});
});
doc.end();
stream.on('finish', () => {
console.log(`已生成 PDF:${outputPath}(共 ${imagePaths.length} 页)`);
resolve();
});
stream.on('error', reject);
});
}
// 使用示例
imagesToPDF(
['photo1.jpg', 'photo2.jpg', 'photo3.jpg'],
'output.pdf'
);
最佳 PDF 输出技巧
先调整大小再转换
将高分辨率图片直接转为 PDF 会导致文件过大。建议先调整图片尺寸再转换:
| 用途 | 推荐分辨率 | DPI | 说明 |
|---|---|---|---|
| 屏幕阅读 | 1240 × 1754 | 150 | 文件较小,显示清晰 |
| 标准打印 | 2480 × 3508 | 300 | 打印质量好 |
| 高质量印刷 | 3508 × 4961 | 450 | 专业印刷标准 |
| 证件照 | 295 × 413 | 300 | 一寸照片尺寸 |
压缩图片减小 PDF 体积
在转换前压缩图片可以显著减小 PDF 文件大小:
| 优化步骤 | 单张图片大小 | PDF 大小(10 张) |
|---|---|---|
| 原始 JPG | 5 MB | 50 MB |
| 压缩后 JPG | 1.5 MB | 15 MB |
| 转 WebP 后 | 800 KB | 8 MB |
转换格式优化
对于不同类型的图片,选择合适的格式再转 PDF:
| 图片类型 | 推荐预处理 | 说明 |
|---|---|---|
| 照片 | 保持 JPG 或压缩 | 有损格式文件更小 |
| 截图/文字 | 保持 PNG | 保持文字清晰度 |
| 带透明背景 | 先添加白色背景 | PDF 不支持透明 |
| 高分辨率 | 适当缩小 | 避免文件过大 |
页面布局建议
| 布局方式 | 适用场景 | 说明 |
|---|---|---|
| 每页一张图 | 照片集、证件 | 图片完整展示 |
| 每页多图 | 产品目录、对比图 | 节省页面 |
| 自适应 | 混合尺寸图片 | 自动调整大小 |
| 固定尺寸 | 正式文档 | 统一视觉风格 |
多图合并为 PDF 的注意事项
图片顺序
确保图片按正确的顺序排列。建议使用有规律的文件命名:
01_cover.jpg
02_introduction.jpg
03_content.jpg
04_conclusion.jpg
页面方向
混合横向和纵向图片时,建议:
- 使用自适应方向,让每页根据图片方向自动调整
- 或统一将横向图片旋转为纵向
- 在 PDF 阅读器中,混合方向可能影响阅读体验
文件大小控制
合并大量图片时,PDF 文件可能非常大:
- 超过 20 张照片时,建议先压缩图片
- 超过 50 张照片时,考虑分卷为多个 PDF
- 使用 img2pdf 等无损转换工具,避免二次压缩
常见问题
图片转 PDF 后文件变大了? PDF 格式本身有一定的结构开销,且部分转换工具会对图片进行重新编码。建议使用 img2pdf 等无损转换工具,或在转换前先压缩图片。
PDF 中的图片模糊怎么办? 可能是图片分辨率不足或转换时 DPI 设置过低。打印用途建议使用 300 DPI,屏幕阅读至少 150 DPI。可以尝试调整图片尺寸提高分辨率。
如何将 PDF 转回图片?
可以使用 ImageMagick 的 convert 命令:convert input.pdf output.jpg,或使用 PDF 阅读器的导出功能。注意,PDF 转图片是不可逆的有损过程。
PNG 透明背景在 PDF 中变黑了? PDF 标准对透明度的支持有限。转换前应先将 PNG 的透明背景替换为白色,或在代码中检测 RGBA 模式并添加白色底色。
可以在 PDF 中添加文字说明吗? PicKit 图片转 PDF 工具 专注于图片到 PDF 的转换。如需添加文字,建议转换后使用 PDF 编辑器(如 Preview、Adobe Acrobat)添加文字注释。
手机上如何将图片转 PDF? iPhone 用户可以使用”文件”应用——选择图片 → 共享 → 创建 PDF。Android 用户可以使用 Google Drive 的扫描功能。对于更好的控制和批量处理,推荐使用 PicKit 图片转 PDF 工具。