使用场景:LaTeX 中无法直接使用 svg 图片,需要将图片转为 pdf 插入
前置要求:bash, inkscape 命令工具
bash脚本svg2pdf.sh
#!/bin/bash
# 从指定的输入目录中取出所有的 SVG 文件,然后转换为 PDF 文件
# 依赖:inkscape
# 默认输入和输出目录
in_dir=svg
out_dir=svg_out_pdf
# 解析命令行参数
while getopts "i:o:h" opt; do
case $opt in
i)
in_dir=$OPTARG
;;
o)
out_dir=$OPTARG
;;
h)
echo "Usage: $0 [-i input_dir] [-o output_dir]" >&2
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
mkdir -p "$out_dir"
# 只匹配svg后缀的文件
for file in "$in_dir"/*.svg; do
base_name=$(basename "$file" .svg)
# 检查输出目录中是否已经存在同名的 PDF 文件
if [ ! -f "$out_dir/$base_name.pdf" ]; then
# inkscape命令接口,将 SVG 文件转换为 PDF 文件
inkscape -z -D --file="$file" --export-pdf="$out_dir/$base_name.pdf"
else
echo "Skipping $file: PDF file already exists"
fi
done
bash svg2pdf.sh -h # 查看命令行使用
bash svg2pdf.sh -i input_dir -o output_dir # 使用示例
注意:因为转化速度较慢,所以会检查输出目录中时候已经存在转化过的文件,这些文件不会重复转化,如果有同名文件改变了,需要删除对应的输出文件重新运行脚本才能更新。