2010-01-27 12 views
13

Ho un sito Web che utilizza SVG per un lato interattivo del client thingamabob. Vorrei fornire l'opzione per scaricare un PDF dell'output finale. Posso passare l'output SVG finale al server, dove voglio convertirlo in PDF, quindi restituirlo al client per il download.SVG in PDF su un server linux condiviso

Questo dovrebbe funzionare su un server Linux condiviso senza headless, dove l'installazione o la compilazione è un enorme dolore o impossibile. Il sito Web è PHP, quindi la soluzione ideale sarebbe PHP o utilizzare software facilmente installabile su un server web condiviso. Python, perl e ruby ​​sono disponibili, insieme alle solite cose che ci si potrebbe aspettare su una macchina Linux. Probabilmente le soluzioni che coinvolgono cairo, scripting inkscape o installazione più complessa di "FTP it up". Spendono anche grandi quantità di denaro, naturalmente. Poiché si tratta di un server condiviso, anche le soluzioni di memoria e/o CPU affamate sono fuori, in quanto tendono a essere uccisi; questo più o meno esclude il batik.

Il più vicino che ho ottenuto finora è this XSL transform che posso guidare da PHP e quindi spruzzare il poscritto risultante attraverso ps2pdf (che è già installato). L'unico problema è che non supporta i percorsi SVG - se così fosse, sarebbe perfetto.

Ci sono un mucchio o domande correlate su StackOverflow, che ho letto interamente, ma tutti presuppongono che sia possibile installare roba, spendere soldi o entrambi.

Qualcuno ha una soluzione pronta per questo, o dovrei semplicemente trascorrere qualche tempo di inattività cercando di aggiungere il supporto per i percorsi a quella trasformazione XSL?

Grazie, Dunc

risposta

16

Oggi mi sono imbattuto in TCPDF che sarebbe stato perfetto per questo, se ne avessi saputo al momento. È solo una raccolta di classi PHP pure, nessuna dipendenza esterna per la maggior parte delle cose.

Si può costruire PDF da zero e si può includere praticamente tutto quello che vuoi in là, tra cui SVG (tra molte, molte altre cose), come mostrato in questi esempi:

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

progetto principale pagina è qui:

http://www.tcpdf.org/

pagina Sourceforge è qui:

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

+3

+1 per il ritorno e l'aggiornamento – hawbsl

2

Hai guardato imagemagick? Sospetto che sia necessario anche il ghostscript per completare il ciclo, il che potrebbe rendere un problema di installazione e difficoltà.

+2

Andando via ImageMagick - che è disponibile - rasterizza (afaik), così si finisce con un PDF con una bitmap in. Voglio un PDF scalabile basato su vettori, che ha il vantaggio di essere infinitamente scalabile, stampabile e piccolo, dimensione del file saggio. –

+3

Avere un altro gioco con ImageMagick e rasterizza, creando un pdf con una bitmap all'interno. Per riferimento futuro, è facile da fare però: convertito test.svg test.pdf o come questo se si desidera specificare la risoluzione di uscita: convertito densità da 1.200 test.svg test.pdf per 1200 dpi , per esempio. Questo tende a creare file PDF piuttosto grandi però. –

2

Suggerisco di dare princexml una prova, forniscono various addons (incluso uno per PHP) e possono produrre PDF da SVG/HTML/XML.

+1

Sì, pensavo che qualcuno lo suggerisse - ma una licenza server per questo è di 3800 USD - mi dispiace tantissimo per questo, temo. Grazie per il suggerimento però :) –

3

È possibile utilizzare Apache FOP s' liberaBatik SVG toolkit che ha un transcoder api di trasformare SVG in PDF.

download link

Avrete bisogno di scrivere un po 'di Java. Esistono esempi di codice here - nota che sarà necessario impostare il transcoder su org.apache.fop.svg.PDFTranscoder anziché su Java.

Si dovrebbe essere in grado di farlo senza installare nulla sul proprio computer - è sufficiente trascinare i vasi lì ed eseguire uno script. Cito:

Tutte le altre librerie necessarie per Batik sono incluse nella distribuzione. Di conseguenza l'archivio Batik è abbastanza grande, ma dopo averlo scaricato, non avrai bisogno di nient'altro.

+0

nota, non ho usato questo direttamente me stesso, ma ho fatto un sacco di lavoro docbook che utilizza batik, e funziona davvero bene. –

+0

Grazie per il suggerimento - Sono a conoscenza di Batik (vedi la domanda) e vorrei provarlo ma non sono stato in grado di caricare xmlgraphics.apache.org per una settimana circa, anche se http://ismysiteup.org/check/xmlgraphics.apache.org afferma che funziona; non sono sicuro di cosa succede. –

0

ho usato TCPDF (http://www.tcpdf.org/) in molti progetti e funziona in quasi tutti i casi d'uso.

Ecco l'esempio di SVG: https://tcpdf.org/examples/example_058/

e che segue è il codice che può aiutare a:

$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);