2010-01-27 14 views
13

Mam stronę internetową, która korzysta z SVG dla interaktywnego klienta thingamabob. Chciałbym udostępnić opcję pobrania pliku PDF z gotowymi danymi wyjściowymi. Mogę przekazać końcowe dane wyjściowe SVG z powrotem do serwera, gdzie chcę przekonwertować na format PDF, a następnie przesłać go do klienta w celu pobrania.SVG do PDF na udostępnionym serwerze linuksowym

Wymagałoby to pracy na bezgłowym udostępnionym serwerze Linux, gdzie instalacja lub kompilacja jest albo ogromnym bólem, albo niemożliwe. Witryna to PHP, więc idealnym rozwiązaniem będzie PHP lub skorzystanie z oprogramowania, które będzie łatwo instalowane na udostępnionym serwerze internetowym. Python, perl i ruby ​​są dostępne wraz ze zwykłymi rzeczami, których można się spodziewać po pudełku Linux-a. Rozwiązania obejmujące cairo, skrypty inkscape lub instalację bardziej złożoną niż "FTP it up" prawdopodobnie już są. Oczywiście wydawane są również duże kwoty pieniędzy. Ponieważ jest to serwer współdzielony, również głodne rozwiązania oparte na pamięci i/lub procesorze są niedostępne, ponieważ będą miały tendencję do zostania zabitym; to mniej lub bardziej wyklucza Batika.

Najbliższy, jaki mam do tej pory, to this XSL transform, który mogę prowadzić z PHP, a następnie nagrać wynikowy postscript przez ps2pdf (który jest już zainstalowany). Jedynym problemem jest to, że nie obsługuje ścieżek SVG - gdyby tak było, byłby idealny.

Istnieje kilka powiązanych pytań na temat StackOverflow, z których wszystkie przeczytałem, ale wszystkie zakładają, że można zainstalować, wydać pieniądze lub jedno i drugie.

Czy ktoś ma gotowe rozwiązanie tego problemu, czy też powinienem poświęcić trochę czasu na próbę dodania ścieżek do tej transformacji XSL?

Dzięki Dunc

Odpowiedz

16

Natknąłem się na dzisiejszy TCPDF, który byłby idealny do tego, gdybym wiedział o tym w tym czasie. To tylko zbiór czystych klas PHP, bez zewnętrznych zależności dla większości rzeczy.

Można budować pdf od zera i można to prawie wszystko, co chcesz w tam, w tym SVG (wśród wielu, wielu innych rzeczy), jak pokazano na poniższych przykładach:

http://www.tcpdf.org/examples.php

głównego projektu strona jest tutaj:

http://www.tcpdf.org/

Sourceforge strona jest tutaj:

http://sourceforge.net/projects/tcpdf/

+3

+1 za powrót i aktualizację – hawbsl

2

pan spojrzał na imagemagick? Podejrzewam, że potrzebujesz również ghostscript do ukończenia pętli, co może spowodować problemy z instalacją i wydajność.

+2

Idąc poprzez ImageMagick - co jest dostępne - rasteryzuje (AFAIK), więc możesz skończyć z plik PDF z bitmapą. Chcę mieć skalowalny oparty na wektorze plik PDF, który ma tę zaletę, że jest nieskończenie skalowalny, nadaje się do drukowania i ma mały rozmiar pliku. –

+3

Drugi miał grę z ImageMagick i robi rasteryzację, tworząc plik pdf z bitmapą w środku. Do wykorzystania w przyszłości, to jest łatwe do zrobienia, choć: nawrócony test.svg test.pdf lub tak, jeśli chcesz określić rozdzielczość wyjściową: convert -density 1200 test.svg test.pdf do 1200dpi , na przykład. Zwykle tworzy to dość duże pliki PDF. –

2

Proponuję dać princexml próbę, dostarczają various addons (w tym jeden dla PHP) i mogą wyprowadzać PDF z SVG/HTML/XML.

+1

Tak, myślałem, że ktoś to zasugeruje - ale licencja na serwer to 3800 USD - obawiam się, że na to dużo pieniędzy. Dzięki za sugestię :) –

3

Można użyć Apache FOP „s darmoBatik SVG Toolkit, który ma transcoder api przekształcić SVG do PDF.

download link

Będziesz musiał napisać odrobinę java. Istnieją przykłady kodu: here - zauważ, że będziesz musiał ustawić transkoder na org.apache.fop.svg.PDFTranscoder zamiast na Javie.

Powinieneś być w stanie to zrobić bez instalowania czegokolwiek na swoim komputerze - po prostu przeciągnij słoiki i uruchom skrypt. Cytuję:

Wszystkie inne biblioteki potrzebne Batikowi są uwzględnione w dystrybucji. W konsekwencji archiwum Batik jest dość duże, ale po pobraniu go nie będziesz potrzebować niczego więcej.

+0

uwaga, nie użyłem tego bezpośrednio ja, ale zrobiłem pęczek docbook pracy, która wykorzystuje batik, i działa naprawdę dobrze. –

+0

Dzięki za sugestię - znam Batika (zobacz pytanie) i chciałbym go wypróbować, ale nie udało mi się załadować pliku xmlgraphics.apache.org na tydzień lub dłużej, chociaż http://ismysiteup.org/check/xmlgraphics.apache.org twierdzi, że działa; nie jestem pewien co z tym. –

0

Użyłem TCPDF (http://www.tcpdf.org/) w wielu projektach i działa prawie w każdym przypadku użycia.

Oto przykład SVG: https://tcpdf.org/examples/example_058/

i Poniżej znajduje się kod, który może ci pomóc:

$pdf->ImageSVG($file='images/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); 

$pdf->ImageSVG($file='images/tux.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false);