Pregunta

Quiero convertir PDF a SVG favor sugerir algunas bibliotecas / ejecutables que serán capaces de hacer esto de manera eficiente. He escrito mi propio programa Java utilizando 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 muy bien, pero el tamaño de los archivos SVG que resultan en enormes. (Muchas veces mayor que el pdf). Me he dado cuenta de que el problema está mirando el SVG en un editor de texto. que encierra todos los personajes en el documento original en su propio bloque, incluso si las propiedades de la fuente de los caracteres es el mismo. Por ejemplo la palabra hola aparecerá como 6 bloques de texto diferentes. ¿Hay una manera de solucionar el código anterior? o por favor sugerir otra solución que funcione de manera más eficiente.

¿Fue útil?

Solución

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

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

inkscape -l out.svg in.pdf

¿Qué se puede llamar entonces probablemente 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 exec () es sincrónico y sólo regresa después de que se complete el proceso (aunque no estoy seguro al 100% en eso), por lo que será capaz de shoudl acaba de leer "out.svg" después de eso. En cualquier caso, googlear "llamada al sistema java" proporcionará más información sobre cómo hacer que una parte correctamente.

Otros consejos

Tome un vistazo a PDF2SVG :

Para utilizar

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

Cuando se utiliza all Dar un nombre de archivo con %d en el mismo (que será sustituido por el número de página).

pdf2svg input.pdf output_page%d.svg all

Y por alguna solución de problemas, consulte: http://www.calcmaster.net/personal_projects/pdf2svg/

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top