PDF 转 JPG 或 PNG:DPI 改变什么,以及怎么只导出一页
PDF 转图片工具把每一页渲染后打成 ZIP,除非选 JPEG,否则输出 PNG。网页表单只有格式和 DPI 两项;接口里的页码与 WebP 参数会被忽略。附 150 与 300 DPI 的实测文件大小,以及只导出单页的做法。
PDF 转图片把 PDF 的每一页渲染成一张图,再打成一个 ZIP 返回。网页表单只有格式(PNG 或 JPEG)和 DPI 两项,不能选页码,也没有 WebP。这两项都会大幅改变输出体积,下面用实测数字说明差多少。
一个完整例子:6 页文件,四种设置
测试文件是用 Ghostscript 生成的 6 页、US Letter、纯文字文档:每页 32 行 11 pt Times,共 5,593 字节。把它分别按下表设置发送到本地构建的服务端 /api/v1/convert/pdf/img。数字来自 2026-10-04 的一次运行,换一份文档,大小会不同。
| DPI | 格式 | 每页像素 | 第 1 页 | 6 页 ZIP |
|---|---|---|---|---|
| 150 | PNG | 1275 x 1650 | 53,400 字节 | 195,476 字节 |
| 300 | PNG | 2550 x 3300 | 127,391 字节 | 494,897 字节 |
| 150 | JPEG | 1275 x 1650 | 252,280 字节 | 1,340,684 字节 |
| 300 | JPEG | 2550 x 3300 | 685,891 字节 | 3,272,299 字节 |
像素数由页面尺寸决定:Letter 是 8.5 x 11 英寸,150 DPI 即 1275 x 1650,300 DPI 即 2550 x 3300。DPI 翻倍,像素数变成四倍,但这次 PNG 的 ZIP 只增大到约 2.5 倍,因为大片纯白容易压缩。
这份文件里 JPEG 反而比 PNG 大:150 DPI 下第 1 页约是 PNG 的 4.7 倍。“JPEG 体积小”的常识适用于照片。文字页大面积纯白、边缘锐利,PNG 压得很好,JPEG 压不好。照片或扫描页可能相反,所以批量转换前先拿一页有代表性的试一下。
ZIP 以 PDF 文件名命名(contract.pdf 得到 contract.zip),里面是 page.1.png 到 page.6.png;选 JPEG 时是 .jpg。
接口接受却忽略的选项
网页表单没有这两项,但脚本如果发送它们,不会报错,也不会生效:
- 页码选择。 发送
pageNumbers=2,返回的仍是全部 6 页。每次都渲染所有页面。 - WebP。
imageFormat=webp返回的 PNG 与png的文件名、大小都一样。只有jpeg和jpg会选 JPEG,其他取值一律回落到 PNG。
需要 WebP,请事后在图片编辑器里转换。
只要某一页怎么办
先把那一页切出来,再转这份单页 PDF:
虽然它来自原文件的第 2 页,文件名仍是 page.1.png,因为提取后的 PDF 页码重新从 1 开始。原页码重要的话请自己改名。
DPI:表单与接口的默认值不同
网页表单预填 300。直接调接口、不传 dpi 时按 150 渲染。脚本产出的图比浏览器的小,多半是这个原因,两边都显式传 dpi。传入非数字会得到 400,信息是 “dpi must be a number”。
经验判断,依据上表而非任何画质基准:150 DPI 够在屏幕上读完整页;300 DPI 用于打印或放大看小字。这次运行中,300 DPI 的 PNG ZIP 约是 150 DPI 的 2.5 倍,页数多又以扫描为主的文档会成倍放大。
哪些东西保留不下来
输出是像素,所以:
把原 PDF 和图片放在一起保存。用图片转 PDF转回去,得到的是由文字照片拼成的 PDF,不是原来的文档。
带密码的 PDF 会得到 400,信息是 “This PDF is password-protected. Enter its password.”,给这个接口加 password 字段也没用。请先用解锁去掉密码。
批量使用前先抽查
从 ZIP 里取一页,放大到 100% 看小字和细线。发虚就提高 DPI 重跑;ZIP 太大就降低 DPI,或者先确认 JPEG 对你的页面确实更小再改用。