Unraid 使用 Docker 将扫描版 PDF 转成图片教程
本文记录一种在 Unraid 环境下,将扫描版 PDF 书籍按页转换成 JPG 图片的方法。该方法不需要在 Unraid 本机安装 pdftoppm,而是通过 Docker 临时容器完成转换,适合扫描书籍、资料归档、图片化保存等场景。
一、准备目录
以《明朝那些事》为例,假设 PDF 文件放在以下目录:
/mnt/user/book/明朝那些事/
PDF 文件名为:
明朝那些事.pdf
先进入该目录:
cd "/mnt/user/book/明朝那些事"
查看当前目录文件:
ls -lh
确认目录中存在:
明朝那些事.pdf
二、使用 Docker 转换 PDF 为图片
执行下面命令:
docker run --rm \
-v "$PWD":/work \
-w /work \
debian:bookworm-slim \
bash -lc 'apt-get update && apt-get install -y poppler-utils && \
mkdir -p "output_images/明朝那些事" && \
pdftoppm -r 300 -jpeg -jpegopt quality=95 \
"明朝那些事.pdf" \
"output_images/明朝那些事/page" && \
echo "明朝那些事完成,生成图片数量:" && \
find "output_images/明朝那些事" -type f -name "*.jpg" | wc -l'
转换完成后,图片会生成在:
/mnt/user/book/明朝那些事/output_images/明朝那些事/
生成的图片文件类似:
page-1.jpg
page-2.jpg
page-3.jpg
page-4.jpg
三、命令说明
1. 挂载当前目录
-v "$PWD":/work
这里的 $PWD 表示当前所在目录。
例如当前目录是:
/mnt/user/book/明朝那些事
那么 Docker 容器中的 /work 就对应 Unraid 上的:
/mnt/user/book/明朝那些事
2. 设置容器工作目录
-w /work
表示 Docker 容器进入 /work 目录执行后续命令。
3. 安装 PDF 转图片工具
apt-get update && apt-get install -y poppler-utils
poppler-utils 中包含 pdftoppm 工具,可以将 PDF 转换为图片。
4. 创建输出目录
mkdir -p "output_images/明朝那些事"
表示创建图片输出目录。
5. 转换 PDF 为 JPG 图片
pdftoppm -r 300 -jpeg -jpegopt quality=95 \
"明朝那些事.pdf" \
"output_images/明朝那些事/page"
参数说明:
-r 300
表示以 300DPI 导出,清晰度较高。
-jpeg
表示输出 JPG 格式。
-jpegopt quality=95
表示 JPG 图片质量为 95。
四、检查图片数量
转换完成后,可以执行:
find "output_images/明朝那些事" -type f -name "*.jpg" | wc -l
查看一共生成了多少张图片。
也可以查看前几张图片文件:
ls -lh "output_images/明朝那些事" | head
五、如果 PDF 文件名不同
如果你的 PDF 文件名不是:
明朝那些事.pdf
比如实际文件名是:
明朝那些事儿全集.pdf
那么只需要把命令中的:
"明朝那些事.pdf"
改成:
"明朝那些事儿全集.pdf"
即可。
六、如果想降低图片体积
默认命令使用:
-r 300
-jpegopt quality=95
图片比较清晰,但文件体积也会比较大。
如果只是网页阅读或普通归档,可以改成:
-r 200
-jpegopt quality=90
例如:
pdftoppm -r 200 -jpeg -jpegopt quality=90 \
"明朝那些事.pdf" \
"output_images/明朝那些事/page"
这样生成的图片会更小,加载速度更快。
七、完整命令模板
以后处理其他 PDF,只需要修改目录名、PDF 文件名和输出目录名即可。
模板如下:
cd "/mnt/user/book/书籍名称"
docker run --rm \
-v "$PWD":/work \
-w /work \
debian:bookworm-slim \
bash -lc 'apt-get update && apt-get install -y poppler-utils && \
mkdir -p "output_images/书籍名称" && \
pdftoppm -r 300 -jpeg -jpegopt quality=95 \
"书籍名称.pdf" \
"output_images/书籍名称/page" && \
echo "转换完成,生成图片数量:" && \
find "output_images/书籍名称" -type f -name "*.jpg" | wc -l'
八、以《明朝那些事》为例的完整流程
cd "/mnt/user/book/明朝那些事"
docker run --rm \
-v "$PWD":/work \
-w /work \
debian:bookworm-slim \
bash -lc 'apt-get update && apt-get install -y poppler-utils && \
mkdir -p "output_images/明朝那些事" && \
pdftoppm -r 300 -jpeg -jpegopt quality=95 \
"明朝那些事.pdf" \
"output_images/明朝那些事/page" && \
echo "明朝那些事完成,生成图片数量:" && \
find "output_images/明朝那些事" -type f -name "*.jpg" | wc -l'
生成目录:
/mnt/user/book/明朝那些事/output_images/明朝那些事/
九、注意事项
- 路径中如果有空格,一定要加英文双引号。
- PDF 文件名必须和命令中填写的一致。
- 如果图片很多,说明 PDF 页数较多,属于正常情况。
- 300DPI 适合高清保存,200DPI 更适合网页浏览。
- 该方法使用 Docker 临时容器,执行完成后容器会自动删除,不会长期占用系统资源。
十、常见问题
1. 提示 pdftoppm: command not found 怎么办?
这是因为 Unraid 本机没有安装 pdftoppm。使用本文的 Docker 命令即可,不需要在 Unraid 本机安装软件。
2. 图片生成在哪里?
图片生成在当前书籍目录下的:
output_images/书籍名称/
例如:
/mnt/user/book/明朝那些事/output_images/明朝那些事/
3. 怎么确认当前路径?
执行:
pwd
即可查看当前所在目录。
4. 为什么命令中没有写完整路径?
因为命令使用了:
-v "$PWD":/work
$PWD 就是当前目录。只要先 cd 到书籍目录,Docker 就会自动在这个目录下处理 PDF。
5. 能不能批量处理多本书?
可以。每本书单独建一个目录,然后进入对应目录执行命令即可。这样图片不会混在一起,后期管理也更清晰。
评论区