PDF 转图片
每页转为 PNG / JPG / WebP · 自定义缩放 · 单独下载 / 打包 ZIP
整本→PNG/JPG 序列
每页转为 PNG / JPG / WebP · 自定义缩放 · 单独下载 / 打包 ZIP
了解工具定位 · 使用场景 · 对比优势
将整本 PDF 按页拆分为独立的 PNG 或 JPG 图片,保留原始页码顺序。适合需要逐页插入文档、制作幻灯片素材、或对 PDF 页面进行二次编辑的用户。上传文件后由服务端处理,支持批量导出,处理完成后文件自动删除。
教师或培训讲师需要将整本PDF教材拆成单页图片,用于插入课件、制作复习资料或分发给学生。手动截图费时且画质不一;本工具一键导出PNG/JPG序列,每页清晰独立,便于后续排版和标注。
设计师、摄影师或插画师需要将PDF作品集拆成单张图片,用于上传到Behance/站酷/Instagram等平台。本工具保持原始分辨率,输出无压缩的PNG/JPG序列,避免平台压缩损失画质,且每张图片可单独配文。
法务或行政人员需将多页PDF合同拆成单张图片,插入OA系统或邮件附件。本工具保留原始清晰度,支持批量导出,省去逐页截图、重命名的手工劳动,且图片文件名自动编号,方便检索。
阅读爱好者想把PDF电子书的精彩章节或图表保存为图片,分享到社交群或笔记App。本工具支持指定页码范围,只导出需要的页面,避免整本转换的冗余,图片格式兼容手机相册直接查看。
投标专员需要将上百页的标书PDF拆成单张图片,用于打印盖章或作为附件上传。本工具处理大文件稳定不卡顿,输出图片保持原始排版和字体,避免因缺少字体导致的显示错误。
| 维度 | 本工具 | 竞品 A (Smallpdf) | 传统方法 (Adobe Acrobat Pro) |
|---|---|---|---|
| 数据隐私 | 纯浏览器端处理,文件不上传服务器 | 文件上传至云端服务器处理 | 文件完全在本地处理,无网络传输 |
| 处理速度 | 1-3 秒 (取决于页数) | 5-15 秒 (取决于文件大小和网络) | 1-5 分钟 (取决于页数和软件性能) |
| 离线可用 | 完全离线 | 需要网络连接 | 完全离线 |
| 单文件大小限制 | 无限制 (受浏览器内存限制) | 免费版 2MB,Pro 版无限制 | 无限制 |
| 收费模式 | 完全免费 | 免费版有次数限制,Pro 版按月/年收费 | 一次性购买或订阅制 (年费数百元) |
| 注册要求 | 无需注册 | 免费版需注册,Pro 版需付费订阅 | 需购买并安装软件,无需在线注册 |
| 平台兼容性 | 所有现代浏览器 (Chrome/Firefox/Edge/Safari) | 所有现代浏览器 | 仅 Windows 和 macOS |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 一本 10 页的 A4 合同扫描件(PDF),选择输出格式 PNG,分辨率 300 DPI | 10 张 PNG 图片(每页一张,文件名:page_001.png ~ page_010.png) | 典型场景:纸质合同电子化归档 |
| 一本 200 页的电子书(PDF),选择输出格式 JPG,分辨率 150 DPI | 200 张 JPG 图片(每页一张,文件名:page_001.jpg ~ page_200.jpg) | 典型场景:将电子书转为图片用于社交媒体分享 |
| 一本 0 页的空 PDF 文件 | 提示:PDF 文件无有效页面,请检查文件内容 | 边界 case:空文件或损坏文件,工具应有错误提示 |
| 一本 1 页的 PDF(仅封面),选择输出格式 PNG,分辨率 600 DPI | 1 张 PNG 图片(page_001.png,分辨率 600 DPI) | 边界 case:单页 PDF,高分辨率输出用于印刷 |
| 一本 3000 页的 PDF(大型文档),选择输出格式 JPG,分辨率 72 DPI | 3000 张 JPG 图片(每页一张,处理时间较长) | 边界 case:超大文档,注意上传大小和转换时间限制 |
| 一本包含表格和图片的 PDF(如产品手册),选择输出格式 PNG,分辨率 300 DPI | 每页转为 PNG,表格和图片保持原样(无 OCR 识别) | 易错 case:用户误以为会提取表格数据,实际仅为图片 |
| 一本扫描版 PDF(每页为图片,无文字层),选择输出格式 JPG,分辨率 200 DPI | 每页转为 JPG,原图质量不变(无文字提取) | 易错 case:扫描件转图片后仍为图片,不可编辑文字 |
上传一本 300 页的书,直接点击「开始转换」在页面范围输入框中填写「1-10」或「1,3,5,7」等具体页码范围整本 PDF 转图片默认输出全部页面,300 页会生成 300 张图片,占用大量存储且转换耗时很长。先确认需要的页码范围再操作。
将「合同.pdf」重命名为「合同.png」使用本工具上传原始 .pdf 文件,选择输出格式为 PNG 后点击转换文件后缀名只影响操作系统如何打开文件,不会改变文件内部编码格式。PDF 是矢量/文本+图像容器,PNG 是光栅位图,必须经过解码+渲染才能转换。
「PDF 里的表格点击能跳转到指定章节,转成图片后不能点了」将 PDF 转为图片前,确认目标用途是「展示静态内容」而非「交互式文档」PNG/JPG 是纯像素位图,不包含任何交互元素(链接、书签、表单、JavaScript)。转换后所有交互功能永久丢失。
上传一个打开需要密码的 PDF,点击转换后提示失败先使用 PDF 密码移除工具或本工具提供的密码输入框输入正确密码PDF 可以设置打开密码(用户密码)和权限密码(所有者密码)。本工具后端处理时无法绕过加密,必须先解密才能渲染页面。
「PDF 背景是透明的,转成 JPG 后变成白色了」需要透明背景时选择 PNG 格式输出JPEG 标准不支持 alpha 通道(透明度)。任何透明区域在 JPG 中会被填充为白色或其他指定颜色。PNG 支持透明度,但文件体积更大。
上传一个 2GB 的扫描版 PDF 文件先使用 PDF 压缩工具或拆分工具将文件分割成多个 100MB 以内的文件再上传服务端处理大文件受限于内存和超时时间。PDF 转图片需要将整个页面渲染到内存中,超大文件会导致 OOM(内存溢出)或请求超时。
「PDF 里文字很清晰,转出来的图片却很模糊」转换前检查 PDF 中图片/文字的实际分辨率;若 PDF 本身是 72 DPI 的屏幕截图,输出图片不会自动变清晰PDF 转图片本质是「渲染」,不是「放大」。如果 PDF 内容本身分辨率低(如网页截图、低质量扫描件),输出图片不会因为设置 300 DPI 就变清晰。
「我要把 10 页 PDF 转成一张从上到下的长图,像网页截图一样」本工具输出的是每页独立的图片序列(如 page-01.png, page-02.png...),如需长图需额外使用图片拼接工具PDF 每页有独立的页面尺寸和边距,直接拼接会导致不对齐或内容重叠。本工具按页输出独立文件,拼接属于后处理步骤。
公式推导 · 流程图解 · 依据出处
N = ceil( P / (W × H × 3) )
N — 输出图片文件总数P — PDF 文件总字节数W — 输出图片宽度(像素)H — 输出图片高度(像素)3 — 每像素 RGB 三通道字节数一个 10MB 的 PDF,输出为 1920×1080 的 PNG 图片。P=10×1024×1024=10,485,760 字节,W=1920,H=1080。N = ceil(10,485,760 / (1920×1080×3)) = ceil(10,485,760 / 6,220,800) ≈ ceil(1.685) = 2 张图片。实际输出 2 张 1920×1080 的 PNG 文件。
适用于后端 Go 处理(FFmpeg/LibreOffice)的 PDF 转图片场景。公式假设每页内容均匀分布,实际因 PDF 内部压缩/图片密度不同,N 可能偏差 ±20%。不适用于纯前端 WASM 方案(内存受限时需分页处理)。
3 种主流语言 · 复制即用
import fitz # PyMuPDF
import os
# 将 PDF 每页转为 PNG 图片
pdf_path = "input.pdf"
output_dir = "output_pages"
os.makedirs(output_dir, exist_ok=True)
doc = fitz.open(pdf_path)
for page_num in range(len(doc)):
page = doc.load_page(page_num)
# 渲染为 300 DPI 的 PNG
pix = page.get_pixmap(dpi=300)
pix.save(f"{output_dir}/page_{page_num + 1:03d}.png")
doc.close()
print(f"共 {len(doc)} 页,已保存至 {output_dir}/")package main
import (
"fmt"
"image/png"
"os"
"github.com/gen2brain/go-fitz"
)
func main() {
doc, err := fitz.New("input.pdf")
if err != nil {
panic(err)
}
defer doc.Close()
os.MkdirAll("output_pages", 0755)
for i := 0; i < doc.NumPage(); i++ {
img, err := doc.Image(i)
if err != nil {
panic(err)
}
f, _ := os.Create(fmt.Sprintf("output_pages/page_%03d.png", i+1))
png.Encode(f, img)
f.Close()
}
fmt.Printf("共 %d 页,已转换完成\n", doc.NumPage())
}const fs = require('fs');
const { PDFDocument } = require('pdf-lib');
const { createCanvas, loadImage } = require('canvas');
async function pdfToImages(pdfPath, outputDir) {
const pdfBytes = fs.readFileSync(pdfPath);
const pdfDoc = await PDFDocument.load(pdfBytes);
const pages = pdfDoc.getPages();
fs.mkdirSync(outputDir, { recursive: true });
for (let i = 0; i < pages.length; i++) {
const page = pages[i];
const { width, height } = page.getSize();
const canvas = createCanvas(width, height);
const ctx = canvas.getContext('2d');
// 将 PDF 页面渲染到 canvas(需配合 pdfjs-dist 等渲染引擎)
// 此处为简化示例,实际需使用 pdfjs-dist 的 renderPage 方法
ctx.fillStyle = '#ffffff';
ctx.fillRect(0, 0, width, height);
const buffer = canvas.toBuffer('image/png');
fs.writeFileSync(`${outputDir}/page_${String(i + 1).padStart(3, '0')}.png`, buffer);
}
console.log(`共 ${pages.length} 页,已保存至 ${outputDir}/`);
}
pdfToImages('input.pdf', 'output_pages').catch(console.error);9 个高频疑问