Конвертировать SVG в PDF на нескольких листах


9

У меня есть файл SVG, созданный в Inkscape. Я хочу напечатать это на нескольких листах, чтобы наконец сформировать большой плакат. Мне нужно, чтобы эти несколько листов были преобразованы в PDF, чтобы я мог распечатать их из любой операционной системы.

Файл, с которым я работаю:

  • SVG имеет размер 840 мм х 297 мм. (ширина х высота)
  • Создайте PDF-файл с двумя листами формата А3 (420 мм х 297 мм).

Вы можете скачать файл, если хотите попробовать свое решение самостоятельно.

Я открыт практически для любого решения, будь то расширения / скрипты Inkscape или инструменты командной строки. Я просто не хочу баловаться вручную каждый раз, когда мне нужно заново делать конвертацию.

Вещи, которые я пробовал и не работал:

  • Inkscape -pages добавляет поддержку нескольких страниц в Inkscape, но не поддерживает разделение данного файла на страницах.

Инструменты , которые будут работать только с форматом растровых изображений (например , PNG или JPG) являются не годен :

Инструменты, которые я слышал, могут работать, но где я не уверен, будут ли они и как к ним обращаться:

Обновление: добавлена ссылка для скачивания .



Вы можете использовать imagemagick (команда convert), чтобы обрезать верхнюю и нижнюю части изображения независимо в два разных PDF-файла.
Харрис

Например:convert filename.svg -crop 100%x50% +repage filename.pdf
Харрис

@MadMike, не могли бы вы упомянуть ваш текущий рабочий процесс? (т.е. как ты делаешь это вручную?)
user.dz

1
@Sneetsher У меня есть SVG-файл увеличенного размера (2 x A3). Я хотел бы преобразовать его в формат (например, PDF), который я могу перенести на работу и распечатать оттуда. На работе у меня будет только Windows. Сейчас дело не в том, делать это вручную или нет, а в том, как это сделать вообще.
MadMike

Ответы:


1

Вы пробовали pdfposterпакет? С веб-сайта проекта : «Pdfposter можно использовать для создания большого плаката, построив его из нескольких страниц и / или напечатав его на большом носителе. Он ожидает в качестве входного файла PDF, обычно печатая на одной странице. Результат снова Файл PDF, возможно, содержащий несколько страниц, которые вместе составляют постер. Входная страница будет масштабирована для получения желаемого размера. "

Я попробовал быстрый пример со страницы руководства: pdfposter -mA3 -pA0 askUbuntu.pdf printer-pages.pdfс вашим примером файла (который я преобразовал в PDF в Inkscape), и он, кажется, работает: 6 страниц формата A3, которые должны быть установлены в сетке 2 × 3.


Почти работает. Я пробовал pdfposter -m a3 -p 1x2a3 askUbuntu.pdf out.pdfполученный PDF имеет синий фон (pdfposter 0.6.0) вместо белого. Вы можете проверить это сами, если хотите. Загрузите исходный файл PDF здесь и повторите преобразование, пожалуйста. У вас есть такой же результат?
MadMike

@MadMike: я получаю такой же синий фон с вашим PDF (но белый с моим). Вы также использовали «Сохранить как» в Inkscape для создания PDF? Я заметил, что в вашем PDF я не могу выделить текст, а я могу в моем. Если я выберу опцию «конвертировать текст в пути» в опциях экспорта в PDF, я получу тот же синий фон, что и после использования pdfposter. Для полноты: у меня та же версия pdfposterи версия 0.48.4 Inkscape.
ph0t0nix

Юп. Работает отлично. Не преобразование текста в путь при сохранении в PDF имеет значение. Теперь я надеюсь, что вложение шрифта достаточно хорошо для принтера. ;)
MadMike

Спасибо, pdfposter тоже работает для меня. Мне просто нужно было получить его версию для разработки ( gitlab.com/pdftools/pdfposter ), потому что версия из официального репозитория Ubuntu (pdfposter 0.6.0-2) инвертировала черный и белый цвета.
Михал Фапсо

2

Вы можете сохранить изображение в формате pdf из inkscape напрямую, используя самое высокое разрешение (например, 600), принтера, который вы планируете использовать для печати.

После этого вы можете использовать imagemagick (команда convert), чтобы обрезать верхнюю и нижнюю части изображения независимо в два разных файла pdf. Например (напечатано на терминале):

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

Затем вы можете разделить его на отдельные файлы PDF, используя:

pdftk filename.pdf burst

Я предполагаю, что imagemagick и pdftk уже установлены.


Вы также можете попробовать следующие варианты, чтобы избежать растеризации изображения:-density 600 -define psd:fit-page=2338x -resize 2338x
Harris

convert banner_eingang5.svg -density 600 -define psd:fit-page=2338x -resize 2338x -crop 50%x100% +repage filename.pdfЯ получаю растеризованный PDF с размером 49x35 мм (путь к маленькому)
MadMike

Это дает вам растеризованный PDF:convert -density 90 askUbuntu.svg -crop 50%x100% +repage -trim -background black askUbuntu.pdf
Harris

@ Харрис, насколько я знаю, imagemagick не может обрабатывать векторную графику. Что бы вы ни делали, на выходе всегда будет растеризованное изображение.
Glutanimate

На своем сайте они говорят, что imagemagick использует inkscape или rsvg-convert для обработки файлов SVG.
Харрис

0

так как я не смог получить ваш файл (неработающая ссылка), я справился с PDF на моем компьютере. Во всяком случае, так я поступил:

  • Запустите Scribus ( 1.4.3 в Ubuntu 12.04 LTS )
  • создать новый двухстраничный документ A3 с выбранными параметрами «Двойная страница» и «Начиная с левой страницы» (возможно, не правильный перевод, так как я работаю над французской версией Scribus).
  • создать рамку над двумя страницами
  • импортировать PDF
  • установить размер изображения по размеру кадра
  • экспортировать как PDF
  • распечатай это

Результат в архиве вы можете скачать здесь: http://www.filedropper.com/2a3tar_1 (1.4 мес)

Проблема, которая может возникнуть, связана с техническими наценками, которые обычно имеют настольные принтеры.

В этом случае вы можете сделать 2 кадра изображений, которые перекрываются, как в предоставленном файле 2A3bis.sla .


Я обновил ссылку для скачивания.
MadMike

0

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
    

    т.е. 2х1 сетка

  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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.