Domanda

Voglio convertire i PDF in formato SVG si prega di suggerire alcune librerie / eseguibili che saranno in grado di fare questo in modo efficace. Ho scritto il mio programma Java utilizzando le librerie Apache PDFBox e 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);
    }

Questa soluzione funziona grande, ma la dimensione dei file risultanti SVG in enorme. (Molte volte superiore alla pdf). Ho capito dove sia il problema, cercando in SVG in un editor di testo. racchiude ogni personaggio del documento originale nel proprio blocco, anche se le proprietà del carattere dei personaggi è la stessa. Per esempio la parola ciao apparirà come 6 diversi blocchi di testo. C'è un modo per risolvere il codice di cui sopra? O si prega di suggerire un'altra soluzione che funziona in modo più efficiente.

È stato utile?

Soluzione

Inkscape può anche essere utilizzato per convertire i PDF in formato SVG. E 'in realtà molto bravo in questo, e anche se il codice che genera è un po' gonfio, per lo meno, non sembra avere il problema particolare che si è verificato nel programma. Penso che sarebbe stato difficile da integrare direttamente in Java, ma Inkscape offre una pratica interfaccia a riga di comando per questa funzionalità, quindi probabilmente il modo più semplice per l'accesso sarebbe tramite una chiamata di sistema.

Per utilizzare l'interfaccia della riga di comando di Inkscape per convertire un PDF in un file SVG, uso:

inkscape -l out.svg in.pdf

Il che si può quindi probabilmente chiamare utilizzando:

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

Credo che exec () è sincrona e soltanto i ritorni dopo il completamento del processo (anche se non sono sicuro al 100% su questo), in modo da shoudl essere in grado di leggere solo "out.svg" dopo. In ogni caso, Googling "chiamata di sistema java" produrrà ulteriori informazioni su come fare quella parte in modo corretto.

Altri suggerimenti

Date un'occhiata al pdf2svg :

Per usare

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

Quando si utilizza all dare un nome di file con %d in esso (che sarà sostituito dal numero di pagina).

pdf2svg input.pdf output_page%d.svg all

E per alcuni problemi Vedere: http://www.calcmaster.net/personal_projects/pdf2svg/

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

contenuto di to-svg.sh

#!/bin/bash
FILES=burst/*
for f in $FILES
do
  inkscape -l "$f.svg" "$f"
done
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top