任务叙述:已经有一个很长的pdf,要在linux上用脚本合成一张长图,如果由程序完成将PDF转换为长图,必须要实现两个功能:
将PDF的每一页转换为图片
将转换后的多张图片合并为一张长图
1. 将PDF的每一页转换为图片
基本就是第二句话,将生成的图片放在tmp…的文件夹下
mkdir tmp-pdf-page
## 将pdf转换为多张png
gs -sDEVICE=pngalpha -o "./tmp-pdf-page/$filename-%d.png" -r144 "$pdfname";
2. 将转换后的多张图片合并为一张长图
- 将多张图片合并为一张,每张图片直接添加50像素间隔,最后
- 将图片尺寸设置1080宽度后裁掉第一张和最后一张的边框,并
- 进行锐化处理后输出为jpg。
convert ./tmp-pdf-page/$filename-*.png \
-background white \
-bordercolor white \
-border 0x50 \
-append \
-shave 0x50 \
-resize 1080 \
-quality 85 \
-sharpen 0x1.0 \
$filename-dest.jpg
3. 完整脚本
#!/bin/bash
pdfname="文件名称.pdf"
filename="${pdfname%%.*}"
## 创建临时文件夹存储每张pdf页面对应的图片
mkdir tmp-pdf-page
## 将pdf转换为多张png
gs -sDEVICE=pngalpha -o "./tmp-pdf-page/$filename-%d.png" -r144 "$pdfname";
## 将多张图片合并为一张,每张图片直接添加50像素间隔,最后
# 将图片尺寸设置1080宽度后裁掉第一张和最后一张的边框,并
# 进行锐化处理后输出为jpg。
# 参考资料:
convert ./tmp-pdf-page/$filename-*.png \
-background white \
-bordercolor white \
-border 0x50 \
-append \
-shave 0x50 \
-resize 1080 \
-quality 85 \
-sharpen 0x1.0 \
$filename.jpg
## 删除单张pdf文件对应的图片
rm -rf ./tmp-pdf-page