如何将多个 svg 文件转换为 pdf

问题描述 投票:0回答:1

我正在开发一个项目,需要从多个 SVG 文件创建一个 PDF 文件。我决定为每个 SVG 文件创建临时 PDF 文件,以便稍后将它们组合在一起(可能使用 LaTeX)。我希望最终的 PDF 格式为 A4 横向,并为奇数页和偶数页提供特定的边距。请注意,这些 SVG 文件数量非常多,最终产品将用于打印。

这些 SVG 文件包括:

  • 波斯字体
  • 有些文字有渐变
  • 外部 SVG 文件作为背景图案甚至图像。

我正在寻找是否可以使用 Python 脚本或某些 Linux 工具自动执行此过程。 我非常感谢您在这种特定情况下的帮助。

我尝试使用 Cairosvg 和 Inkscape 但没有成功。我遇到了多个问题:

  • 使用 Cairosvg,不支持波斯字体
  • 使用 Inkscape,文本和外部 SVG 文件的渐变未导出(我也尝试过
    --export-area-drawing
    ,但没有成功)
python linux pdf svg farsi
1个回答
0
投票

我认为可能的方法是简单地创建一个 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 中打印多个页面。

© www.soinside.com 2019 - 2024. All rights reserved.