Konwertuj SVG na PDF na kilku arkuszach

9

Mam plik SVG utworzony w Inkscape. Chcę wydrukować go na wielu arkuszach, aby w końcu stworzyć duży plakat. Potrzebuję przekonwertować te wiele arkuszy do formatu PDF, aby móc wydrukować je z dowolnego systemu operacyjnego.

Plik, z którym pracuję:

  • SVG ma wymiary 840 mm x 297 mm. (szerokość x wysokość)
  • Wygeneruj plik PDF z dwoma arkuszami A3 (420 mm x 297 mm).

Możesz pobrać plik, jeśli chcesz wypróbować własne rozwiązanie.

Jestem otwarty na prawie każde rozwiązanie, czy to rozszerzenia / skrypty Inkscape, czy narzędzia wiersza poleceń. Po prostu nie chcę ręcznie robić bałaganu za każdym razem, gdy muszę ponownie wykonać konwersję.

Rzeczy, które próbowałem i nie działały:

  • Inkscape-pages dodaje obsługę wielu stron do Inkscape, ale nie obsługuje oddzielania danego pliku od stron.

Narzędzia, które będą działać tylko z formatem obrazów rastrowych (takie jak PNG lub JPG), nie są potrzebne :

Narzędzia, które słyszałem, które mogą działać, ale nie jestem pewien, czy będą i jak do nich podejść:

Aktualizacja: Dodano link do pobrania .

MadMike
źródło
Możesz użyć imagemagick (konwersja poleceń), aby przyciąć górną i dolną część obrazu niezależnie do dwóch różnych plików pdf.
Harris
Na przykład:convert filename.svg -crop 100%x50% +repage filename.pdf
Harris
@MadMike, czy możesz wspomnieć o bieżącym przepływie pracy? (tj. jak to robisz ręcznie?)
user.dz
1
@Sneetsher Mam duży plik SVG (2 x A3). Chciałbym przekonwertować go do formatu (takiego jak PDF), który mogę przetransportować do pracy i stamtąd wydrukować. W pracy będę mieć tylko system Windows. W tej chwili nie chodzi o to, czy zrobić to ręcznie, czy nie, ale o to, jak to zrobić.
MadMike,

Odpowiedzi:

1

Próbowałeś już pdfposterpaczki? Ze strony internetowej projektu : „Pdfposter może zostać wykorzystany do stworzenia dużego plakatu poprzez zbudowanie go z wielu stron i / lub wydrukowanie go na dużych nośnikach. Oczekuje, że plik wejściowy PDF, zwykle drukowany na jednej stronie. Wynik jest ponownie Plik PDF, być może zawierający wiele stron razem tworzących plakat. Strona wejściowa zostanie przeskalowana w celu uzyskania pożądanego rozmiaru. ”

Wypróbowałem szybki przykład ze strony man: pdfposter -mA3 -pA0 askUbuntu.pdf printer-pages.pdfz twoim plikiem przykładowym (który przekonwertowałem na format PDF w Inkscape) i wydaje się, że działa: 6 stron A3, które należy ustawić w siatce 2 × 3.

ph0t0nix
źródło
Prawie działa. Próbowałem pdfposter -m a3 -p 1x2a3 askUbuntu.pdf out.pdfwynikowy plik PDF ma niebieskie tło (pdfposter 0.6.0) zamiast białego. Możesz to przetestować sam, jeśli chcesz. Pobierz źródłowy plik PDF tutaj i powtórz konwersję, proszę. Czy masz ten sam wynik?
MadMike,
@MadMike: Dostaję to samo niebieskie tło z twoim plikiem PDF (ale białe z moim). Czy używałeś również opcji „Zapisz jako” w Inkscape do utworzenia pliku PDF? Zauważyłem, że w twoim pliku PDF nie mogę wybrać tekstu, podczas gdy mogę w moim. Jeśli wybiorę opcję „Konwertuj teksty na ścieżki” w opcjach eksportu PDF, otrzymam takie samo niebieskie tło, jak po użyciu pdfposter. Dla kompletności: Mam tę samą wersję pdfposterInkscape i wersję 0.48.4.
ph0t0nix,
Jup. Działa świetnie. Różnica polega na tym, że tekst nie jest konwertowany na ścieżkę podczas zapisywania w formacie PDF. Teraz mam nadzieję, że osadzanie czcionek jest wystarczające dla drukarki. ;)
MadMike,
Dzięki, pdfposter też dla mnie działał. Musiałem tylko pobrać jego wersję rozwojową ( gitlab.com/pdftools/pdfposter ), ponieważ ta z oficjalnego repozytorium Ubuntu (pdfposter 0.6.0-2) odwróciła czarno-białe kolory.
Michał Fapso
2

Możesz zapisać jako obraz w formacie pdf z programu inkscape bezpośrednio, używając najwyższej rozdzielczości (powiedzmy 600) drukarki, której zamierzasz użyć do drukowania.

Następnie możesz użyć imagemagick (konwersja poleceń), aby przyciąć górną i dolną część obrazu niezależnie do dwóch różnych plików pdf. Na przykład (wpisany na terminalu):

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

Następnie możesz podzielić go na pojedyncze pliki pdf, używając:

pdftk filename.pdf burst

Zakładam, że imagemagick i pdftk są już zainstalowane.

Harris
źródło
Możesz także wypróbować następujące opcje, aby uniknąć rasteryzacji obrazu:-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.pdfDostaję zrasteryzowany plik pdf o rozmiarze 49 x 35 mm (droga do małej)
MadMike,
Czy to daje zrasteryzowany pdf:convert -density 90 askUbuntu.svg -crop 50%x100% +repage -trim -background black askUbuntu.pdf
Harris
@Harris, o ile wiem, obraz nie może obsłużyć grafiki wektorowej. Cokolwiek zrobisz, wydruk będzie zawsze zrasteryzowanym obrazem.
Glutanimate,
Na swojej stronie internetowej twierdzą, że imagemagick używa inkscape lub rsvg-convert do obsługi plików svg.
Harris
0

ponieważ nie mogłem pobrać twojego pliku (uszkodzony link) zarządzałem z plikiem PDF, który miałem na swoim komputerze. W każdym razie tak postępowałem:

  • Uruchom Scribus ( 1.4.3 na Ubuntu 12.04 LTS )
  • utwórz nowy 2-stronicowy dokument A3 z wybranymi opcjami „Podwójna strona” i „Począwszy od lewej strony” (być może nie jest to właściwe tłumaczenie, ponieważ pracuję nad francuską wersją Scribusa).
  • utwórz ramkę obrazu na dwóch stronach
  • importować PDF
  • ustaw rozmiar obrazu dopasowany do ramki
  • eksportuj jako PDF
  • Wydrukuj to

Wynik znajduje się w archiwum, które można pobrać tutaj: http://www.filedropper.com/2a3tar_1 (1.4 Mo)

Problem, który może wystąpić, dotyczy marginesów technicznych, jakie zwykle mają drukarki stacjonarne.

W takim przypadku można utworzyć 2 klatki obrazów, które zachodzą na siebie, jak w dostarczonym pliku 2A3bis.sla .

Fremo
źródło
Zaktualizowałem link do pobrania.
MadMike,
0

SVG to XML, możesz użyć tego skryptu Pythona do generowania plasterków. W rzeczywistości nie kroi go, ale używa tej samej kopii pliku wejściowego z różnymi wartościami, viewBoxaby pokazać tylko obszar docelowy.

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. Generuj plastry

    python svg_slice.py 2 1 askUbuntu.svg
    

    tj .: siatka 2x1

  2. Następnie użyj Inkscape do wyeksportowania pliku PDF dla każdego plasterka / komórki

    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
user.dz
źródło