我正在开发一个项目,需要从多个 SVG 文件创建一个 PDF 文件。我决定为每个 SVG 文件创建临时 PDF 文件,以便稍后将它们组合在一起(可能使用 LaTeX)。我希望最终的 PDF 格式为 A4 横向,并为奇数页和偶数页提供特定的边距。请注意,这些 SVG 文件数量非常多,最终产品将用于打印。
这些 SVG 文件包括:
我正在寻找是否可以使用 Python 脚本或某些 Linux 工具自动执行此过程。 我非常感谢您在这种特定情况下的帮助。
我尝试使用 Cairosvg 和 Inkscape 但没有成功。我遇到了多个问题:
--export-area-drawing
,但没有成功)我认为可能的方法是简单地创建一个 html 文件并创建您喜欢的 1 或 2 页,然后尝试打印它以检查样式是否符合您的喜好,您可以在边距中添加 css,以及您是否喜欢这些页面然后你可以使用 js 使该页面动态化,只更新 svgs。将这些放在单个 html 文件中,我认为对于您的最终产品,有许多 python 库可以将这些 html 文件转换为 pdf。如果某些东西不支持,这是最好的解决方案。你可以使用
pyppeteer
python 库并安排它。这是代码的演示:
import asyncio
from pyppeteer import launch
async def generate_pdf(html_file, pdf_output):
browser = await launch()
page = await browser.newPage()
# Load your HTML file (local or remote)
await page.goto(f'file://{html_file}', {'waitUntil': 'networkidle0'})
# Generate PDF with specific settings
await page.pdf({
'path': pdf_output,
'format': 'A4',
'landscape': True,
'printBackground': True, # Ensures background images and colors are included
'margin': {
'top': '20mm',
'bottom': '20mm',
'left': '25mm',
'right': '25mm'
}
})
await browser.close()
# Run the script
html_path = '/path/to/your/input.html'
output_pdf = '/path/to/your/output.pdf'
asyncio.get_event_loop().run_until_complete(generate_pdf(html_path, output_pdf))
在这里,您不需要创建多个 html 文件,而是自动化单个 html 文件,最终可以在单个 pdf 中打印多个页面。