2010-01-27 11 views
13

Tengo un sitio web que usa SVG para un lado del cliente interactivo thingamabob. Me gustaría ofrecer la opción de descargar un PDF de la salida final. Puedo pasar la salida final de SVG al servidor, donde quiero convertir a PDF, luego devolverlo al cliente para su descarga.SVG a PDF en un servidor compartido de Linux

Esto debería funcionar en un servidor linux compartido sin cabeza, donde la instalación o compilación es un dolor enorme o imposible. El sitio web es PHP, por lo que la solución ideal sería PHP o el software que se instala fácilmente en un servidor web compartido. Python, Perl y Ruby están disponibles, junto con las cosas habituales que podrías esperar en un linux box. Es probable que las soluciones que involucran a Cairo, scripts de inkscape o instalaciones más complejas que 'FTP it up' estén fuera. Gastar grandes cantidades de dinero también sale, naturalmente. Como se trata de un servidor compartido, también se eliminan las soluciones de memoria y/o CPU hambrientas, ya que tenderán a matarse; esto más o menos descarta a Batik.

Lo más cercano que tengo hasta ahora es this XSL transform que puedo manejar desde PHP y luego arrojar el postcript resultante a través de ps2pdf (que ya está instalado). El único problema con esto es que no admite rutas SVG; si lo hiciera, sería perfecto.

Hay muchas preguntas relacionadas en StackOverflow, todas las cuales he leído, pero todas asumen que puede instalar cosas, gastar dinero o ambas.

¿Alguien tiene una solución estándar para esto, o debería simplemente pasar un tiempo de inactividad tratando de agregar rutas de soporte a esa transformación XSL?

Gracias, Dunc

Respuesta

16

Hoy tropecé con TCPDF que hubiera sido perfecto para esto, si lo hubiera sabido en ese momento. Es solo una colección de clases de PHP puro, sin dependencias externas para la mayoría de las cosas.

Puede crear archivos PDF a partir de cero y se puede incluir casi cualquier cosa que desee en ese país, incluyendo SVG (entre muchas, muchas otras cosas), como se muestra en estos ejemplos:

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

principal proyecto página está aquí:

http://www.tcpdf.org/

página de Sourceforge está aquí:

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

+3

+1 para volver y actualizar – hawbsl

2

¿Has mirado en imagemagick? Sospecho que también necesita ghostscript para completar el ciclo, lo que puede dificultar la instalación y el rendimiento.

+2

Yendo a través de ImageMagick - que está disponible - rasteriza (que yo sepa), por lo que terminan con un PDF con un mapa de bits. Quiero un PDF basado en un vector escalable, que tenga la ventaja de ser infinitamente escalable, imprimible y minúsculo, en cuanto al tamaño del archivo. –

+3

Tener otro juego con ImageMagick y rasterizar, creando un pdf con un mapa de bits dentro. Para referencia futura, es fácil de hacer sin embargo: convertido test.svg test.pdf o como esto si desea especificar la resolución de salida: convertido -Densidad 1200 test.svg test.pdf de 1200 ppp , por ejemplo. Sin embargo, esto tiende a crear archivos pdf bastante grandes. –

2

Sugiero dar princexml una prueba, proporcionan various addons (incluido uno para PHP) y pueden dar salida a PDF desde SVG/HTML/XML.

+1

Sí, pensé que alguien sugeriría eso, pero una licencia de servidor es de 3800 USD. Me temo que habrá mucho dinero para esto. Gracias por la sugerencia, aunque :) –

3

Puede utilizar Apache FOP 's libre juego de herramientas Batik SVG que tiene una transcoder api SVG para transformar a PDF.

download link

Usted tendrá que escribir un poco de java. Hay ejemplos de código here - tenga en cuenta que deberá configurar el transcodificador como org.apache.fop.svg.PDFTranscoder en lugar de Java.

Debería poder hacer esto sin instalar nada en su máquina, simplemente arrastre las jarras allí y ejecute una secuencia de comandos. Cito:

Todas las otras bibliotecas necesarias para Batik están incluidas en la distribución. Como consecuencia, el archivo de Batik es bastante grande, pero una vez que lo hayas descargado, no necesitarás nada más.

+0

nota, no he usado esto directamente, pero he hecho un montón de trabajo de docbook que utiliza batik, y funciona muy bien. –

+0

Gracias por la sugerencia. Conozco a Batik (vea la pregunta) y me gustaría probarlo, pero no he podido obtener xmlgraphics.apache.org para cargarlo durante una semana más o menos ahora, aunque http://ismysiteup.org/check/xmlgraphics.apache.org afirma que está funcionando; no estoy seguro de qué pasa con eso. –

0

he utilizado TCPDF (http://www.tcpdf.org/) en muchos proyectos y funciona en casi todos los casos de uso.

Aquí está el ejemplo de SVG: https://tcpdf.org/examples/example_058/

y que sigue es el código que puede ayudarle 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); 
Cuestiones relacionadas