如何批量将含波斯字体等特殊元素的SVG转为指定格式PDF并合并?
```<rect x="182mm" y="0mm" width="91mm" height="55mm" fill="url(#imagePattern)" /> <text x="46mm" y="67.25mm" font-family="Gungsuh W33 Regular" font-size="10" letter-spacing="2.5" fill="url(#gradient)">示例文本</text>
解决方案
1. 替换转换工具:用Inkscape命令行模式
放弃rsvg-convert,改用Inkscape的命令行工具,调整参数确保支持所有SVG元素:
inkscape --export-type=pdf --export-area-page --export-dpi=300 --pdf-version=1.7 input.svg -o output.pdf
关键参数说明:
--export-area-page:导出整个SVG页面区域,比--export-area-drawing更稳定,适配自定义尺寸的SVG--export-dpi=300:保证打印级别的清晰度--pdf-version=1.7:支持复杂元素(渐变、外部SVG引用)
字体问题修复
将波斯字体安装到系统中:
- Linux下将字体文件复制到
/usr/share/fonts或~/.fonts目录 - 运行
fc-cache -fv更新字体缓存
Inkscape会优先调用系统字体,避免@font-face路径解析错误。
2. 批量转换的Python脚本
替换原有脚本,用Inkscape实现批量转换:
import os import subprocess from pathlib import Path # 配置路径 svg_dir = Path("/path/to/your/svg/files") temp_pdf_dir = Path("/path/to/temp/pdf") final_pdf_path = Path("/path/to/final/output.pdf") # 创建临时目录(如果不存在) temp_pdf_dir.mkdir(parents=True, exist_ok=True) # 批量转换SVG到PDF for svg_file in sorted(svg_dir.glob("*.svg")): # 排序保证文件顺序正确 base_name = svg_file.stem pdf_path = temp_pdf_dir / f"{base_name}.pdf" # 执行Inkscape转换命令 subprocess.run([ "inkscape", "--export-type=pdf", "--export-area-page", "--export-dpi=300", "--pdf-version=1.7", str(svg_file), "-o", str(pdf_path) ], check=True, cwd=svg_dir) # cwd指定工作目录,确保外部SVG路径正确 # 合并PDF(用pdftk,若不可用可替换为pdfunite) pdf_files = sorted(temp_pdf_dir.glob("*.pdf")) subprocess.run(["pdftk"] + [str(p) for p in pdf_files] + ["cat", "output", str(final_pdf_path)], check=True)
3. 用LaTeX精确控制边距与页面方向
如果需要严格设置A4横向和奇偶页边距,用LaTeX合并PDF更灵活:
- 创建
merge.tex文件:
\documentclass[11pt,a4paper,landscape,twoside]{article} \usepackage{geometry} % 自定义奇偶页边距:奇数页左3cm右1cm,偶数页左1cm右3cm \geometry{ left=3cm, right=1cm, top=2cm, bottom=2cm, asymmetric % 启用奇偶页边距反转 } \usepackage{pdfpages} \begin{document} % 批量导入所有临时PDF(按文件名排序) \foreach \file in {file1,file2,file3,...} { \includepdf[pages=-]{/path/to/temp/pdf/\file.pdf} } \end{document}
- 运行命令生成最终PDF:
pdflatex merge.tex
4. SVG文件本身的修复
- 确保所有标签闭合(比如示例中的
<text>标签未闭合,会导致解析错误) - 外部SVG引用使用绝对路径,或在脚本中通过
cwd参数指定SVG所在目录,保证Inkscape能找到引用文件
内容的提问来源于stack exchange,提问作者Alireza Saffariyan
相关产品推荐
相关产品推荐

