我在 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)))
生成切片
python svg_slice.py 2 1 askUbuntu.svg
例如:2x1 网格
然后使用 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