我正在使用GhostScript将PDF转换为PNG,问题在于我正在调用的每个页面:
gs -sDEVICE = pnggray -dBATCH -dNOPAUSE -dFirstPage = 10 -dLastPage = 10 -r600 -sOutputFile = image_10.png pdf_file.pdf
哪个不好,我想传递dFirstPage = 10 dLastPage = 30例如,让GhostScript自动提取文件名中包含PAGE-NUMBER的SEPARATE png文件中的每个页面,而不用另外的sOutputFile再次启动它。
我知道这可能很简单,但我很想念......
此外,如果有人可以告诉我需要传递哪些参数以使ghostscript完全无声地运行而没有任何输出到控制台,那将会很棒。
编辑:将%d添加到输出参数会添加运行编号,而不是页面编号。例如:
-dFirstPage = 10 -dLastPage = 15 -sOutputFile = image_%d.png
结果:
image_1.png,image_2.png,image_3.png等...而不是: image_10.png,image_11.png,image_12.png ......
答案 0 :(得分:1)
将其另存为文件
#!/bin/bash
case $# in [!3] ) printf "usage : ${0##*/} stPage endPage File\n" >&2 ;; esac
stPage=$1
endPage=$2
(( endPage ++ ))
file=$3
i=$stPage
while (( i < endPage )) ; do
gs -sstdout=/dev/null -sDEVICE=pnggray -dBATCH -dNOPAUSE -dPage=$i -r600 -sOutputFile=image_$i.png ${file}
(( i ++ ))
done
检查ghost脚本手册以查看是否有-dPage=${num}
选项,否则使用
-dFirstPage=${i} -dLastPage=${i}
。
然后使其可执行chmod 755 batch_gs.sh
最后用参数
运行它 batch_gs.sh 3 5 fileName
(轻度测试)。
我希望这会有所帮助。
答案 1 :(得分:1)
不幸的是,你想做的事情是不可能的。另见我和这里的答案。
如果你想一次性完成所有PNG转换(不为每个新页面重新启动Ghostscript),你必须接受这样一个事实:%d
宏总是从编号第一个输出开始页面为1
,但您当然会获得更好的表现。
如果您不喜欢最终结果中的此命名约定,则 执行第二步,将结果文件重命名为其最终名称。
假设您的初始输出文件名为image_1.png ... image_15.png
,但您希望它们命名为image_25.png ... image_39.png
,那么您执行此操作的核心命令将是:
for i in $(seq 1 15); do
mv image_${i}.png image_$(( ${i} + 24)).png
done
注意,如果两个数字范围相交,则会出错,因为该命令会覆盖一个尚未重命名的输入文件。要保存,请不要使用mv
,而是先使用cp
在临时子目录中复制新文件:
for i in $(seq 1 15); do
cp -a image_${i}.png temp/image_$(( ${i} + 14)).png
done