将多张 SVG 转换为 PDF

将多张 SVG 转换为 PDF

我在 Inkscape 中创建了一个 SVG 文件。我想将其打印到多张纸上,最终形成一张大海报。我需要将这些多张纸转换为 PDF,以便我可以从任何操作系统打印它。

我正在处理的文件:

  • SVG 的尺寸为 840 毫米 x 297 毫米(宽 x 高)
  • 生成包含两张 A3 纸(420 毫米 x 297 毫米)的 PDF。

你可以下载文件如果您想亲自尝试您的解决方案。

我几乎接受任何解决方案,无论是 Inkscape 扩展/脚本还是命令行工具。我只是不想每次重新进行转换时都手动乱搞。

我尝试过但没有效果的方法:

  • inkscape 页面为 Inkscape 添加了对多页的支持,但不支持将给定文件分成多页。

仅适用于光栅图像格式(如 PNG 或 JPG)的工具是不行

我听说过一些工具可能会有用,但我不确定它们是否有效以及如何使用它们:

更新:添加下载链接

答案1

您尝试过这个pdfposter套餐吗?来自该项目网站“Pdfposter 可用于创建大型海报,方法是从多页构建海报和/或将其打印在大型媒体上。它需要输入一个 PDF 文件,通常打印在一页上。输出也是一个 PDF 文件,可能包含多个页面,共同构建海报。输入页面将被缩放以获得所需的大小。”

我尝试了手册页中的一个快速示例:pdfposter -mA3 -pA0 askUbuntu.pdf printer-pages.pdf使用您的示例文件(我在 Inkscape 中将其转换为 PDF),它似乎可以工作:需要以 2×3 网格设置的 6 张 A3 页面。

答案2

您可以直接使用您计划用于打印的打印机的最高分辨率(dpi)(例如 600)将图像从 inkscape 保存为 pdf。

之后,你可以使用 imagemagick(命令 convert)将图片的上下部分分别裁剪成两个不同的 pdf 文件。例如(在终端上输入):

convert askUbuntu.pdf -crop 100%x50% +repage askUbuntuSplit.pdf

然后您可以使用以下方法将其拆分为单独的 pdf 文件:

pdftk filename.pdf burst

我假设 imagemagick 和 pdftk 已经安装好了。

答案3

由于我无法获取您的文件(链接已损坏),我只能使用计算机上的 PDF 进行操作。无论如何,我采取了以下操作:

  • 发射抄写员Ubuntu 12.04 LTS 上的 1.4.3
  • 创建新的 A3 2 页文档,并选择“双页”和“从左页开始”选项(可能不是正确的翻译,因为我正在研究法语 Scribus 版本)。
  • 在两页上创建一个图像框架
  • 导入 PDF
  • 设置图像大小适合框架
  • 导出为 PDF
  • 打印

结果位于档案中,您可以在此处下载: http://www.filedropper.com/2a3tar_1 (1.4 个月)

可能出现的问题与桌面打印机通常具有的技术边界有关。

在这种情况下,你可以制作 2 个重叠的图像帧,就像2A3bis.sla文件已提供。

答案4

SVG 是一种 XML,您可以使用此 Python 脚本生成切片。实际上,它不会对其进行切片,而是使用具有不同值的相同输入文件副本viewBox来仅显示目标区域。

svg_slice.py

#!/usr/bin/env python

import sys, os.path
import xml.etree.ElementTree as ET

fin=sys.argv[-1]
hsplit=int(sys.argv[1])
vsplit=int(sys.argv[2])

tree = ET.parse(fin)
root = tree.getroot()

hstep=float(root.attrib['width'])/hsplit
vstep=float(root.attrib['height'])/vsplit

root.attrib['width']=str(hstep)
root.attrib['height']=str(vstep)

for i in range(hsplit):
    for j in range(vsplit):
        root.attrib['viewBox']='%.4f %.4f %.4f %.4f' % (i*hstep, j*vstep, hstep, vstep)
        tree.write('cell_%i-%i_%s' % (i,j,os.path.basename(fin)))
  1. 生成切片

    python svg_slice.py 2 1 askUbuntu.svg
    

    例如:2x1 网格

  2. 然后使用 Inkscape 导出每个切片/单元的 PDF

    for i in $(ls cell_*); do inkscape $i --export-pdf=$i.pdf; done;
    

ls cell_*

cell_0-0_askUbuntu.svg      cell_1-0_askUbuntu.svg
cell_0-0_askUbuntu.svg.pdf  cell_1-0_askUbuntu.svg.pdf

相关内容