pdf svg batik pdfbox

convertir pdf a svg



batik pdfbox (3)

Eche un vistazo a pdf2svg :

Usar

pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]

Cuando use all proporcione un nombre de archivo con %d en él (que será reemplazado por el número de página).

pdf2svg input.pdf output_page%d.svg all

Y para algunos problemas, vea: http://www.calcmaster.net/personal_projects/pdf2svg/

Quiero convertir PDF a SVG, sugiero algunas bibliotecas / ejecutables que puedan hacer esto de manera eficiente. He escrito mi propio programa Java usando las bibliotecas apache PDFBox y Batik -

PDDocument document = PDDocument.load( pdfFile ); DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); // Create an instance of org.w3c.dom.Document. String svgNS = "http://www.w3.org/2000/svg"; Document svgDocument = domImpl.createDocument(svgNS, "svg", null); SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(svgDocument); ctx.setEmbeddedFontsOn(true); // Ask the test to render into the SVG Graphics2D implementation. for(int i = 0 ; i < document.getNumberOfPages() ; i++){ String svgFName = svgDir+"page"+i+".svg"; (new File(svgFName)).createNewFile(); // Create an instance of the SVG Generator. SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx,false); Printable page = document.getPrintable(i); page.print(svgGenerator, document.getPageFormat(i), i); svgGenerator.stream(svgFName); }

Esta solución funciona de maravilla pero el tamaño de los archivos svg resultantes es enorme (muchas veces mayor que el pdf). He descubierto dónde está el problema mirando el svg en un editor de texto. incluye todos los caracteres del documento original en su propio bloque, incluso si las propiedades de fuente de los caracteres son las mismas. Por ejemplo, la palabra hola aparecerá como 6 bloques de texto diferentes. ¿Hay alguna forma de corregir el código anterior? o sugiera otra solución que funcione de manera más eficiente.


Inkscape también se puede usar para convertir PDF a SVG. En realidad es muy bueno en esto, y aunque el código que genera está un poco hinchado, al menos no parece tener el problema particular que estás encontrando en tu programa. Creo que sería un desafío integrarlo directamente en Java, pero inkscape proporciona una interfaz conveniente de línea de comandos para esta funcionalidad, por lo que probablemente la forma más fácil de acceder a ella sea a través de una llamada al sistema.

Para usar la interfaz de línea de comandos de Inkscape para convertir un PDF a SVG, use:

inkscape -l out.svg in.pdf

A lo que probablemente puedas llamar usando:

Runtime.getRuntime().exec("inkscape -l out.svg in.pdf")

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

Creo que exec () es sincrónico y solo regresa después de que el proceso se complete (aunque no estoy 100% seguro de eso), por lo que simplemente podría leer "out.svg" después de eso. En cualquier caso, googlear "java system call" arrojará más información sobre cómo hacer esa parte correctamente.


pdftk 82page.pdf burst sh to-svg.sh

contenido de to-svg.sh

#!/bin/bash FILES=burst/* for f in $FILES do inkscape -l "$f.svg" "$f" done