我想编写一个 Bash 脚本将.pdf
当前目录中的每个文件转换为一个.png
文件。
例如:
$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png
这是我最好的尝试:
#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png
答案1
如果你有真的奇怪的名称,包含换行符或反斜杠等的名称,您可以执行以下操作:
find . -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file
do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
done
它应该能够处理你扔给它的任何东西。
使用的技巧:
find ... -print0
: 导致find
打印由空字符分隔的结果,让我们处理换行符。IFS=
:这将禁用单词分割,以处理空格。read -r
:禁用反斜杠转义字符的解释,以处理包含反斜杠的文件。read -d ''
:将记录分隔符设置为空字符,以处理find的输出并正确处理带有换行符的文件名。${file%.*}.png
: 使用 shell 的内置字符串操作能力删除扩展名。
答案2
您可以for
按如下方式使用 bash 循环:
#!/bin/bash
for pdfile in *.pdf ; do
convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done
答案3
您可以使用mogrify
批量转换和调整.pdf
当前目录中的所有 s 的大小:
mogrify -verbose -density 500 -resize 800 -format png ./*.pdf
当使用不同的format
(在这种情况下-format png
)时,原始.pdf
文件保持不变,输出文件具有相同的名称,但扩展名将更改为指定的扩展名format
。
答案4
如果您不限于使用 bash,那么您可以使用 python 脚本将.pdf
当前目录中的所有文件转换为高分辨率.png
图像。可以针对其他输入/输出图像类型对其进行修改,或者对convert
.
#! /usr/bin/env python
import os
def main():
dir_list = os.listdir('.')
for full_file_name in dir_list:
base_name, extension = os.path.splitext(full_file_name)
if extension == '.pdf': # then .pdf file --> convert to image!
cmd_str = ' '.join(['convert',
'-density 400',
full_file_name,
base_name + '.png'])
print(cmd_str) # echo command to terminal
os.system(cmd_str) # execute command
if __name__ == '__main__':
main()