convertire pdf in SVG

Voglio convertire PDF in SVG per favore suggerire alcune librerie / eseguibili che saranno in grado di farlo in modo efficiente. Ho scritto il mio programma java usando 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 alla grande ma la dimensione dei file svg risultanti è enorme (molte volte superiore al pdf). Ho capito dove si trova il problema guardando lo svg in un editor di testo. racchiude ogni carattere nel documento originale nel suo blocco anche se le proprietà dei caratteri dei caratteri sono le stesse. Ad esempio la parola ciao apparirà come 6 diversi blocchi di testo. C’è un modo per correggere il codice sopra? oppure, per favore, suggerire un’altra soluzione che funzioni in modo più efficiente.

Inkscape può anche essere utilizzato per convertire PDF in SVG. In realtà è straordinariamente bravo in questo, e anche se il codice che genera è un po ‘gonfio, per lo meno, non sembra avere il particolare problema che si sta incontrando nel tuo programma. Penso che sarebbe difficile integrarlo direttamente in Java, ma inkscape fornisce una comoda interfaccia a riga di comando per questa funzionalità, quindi probabilmente il modo più semplice per accedervi sarebbe tramite una chiamata di sistema.

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

 inkscape -l out.svg in.pdf 

Che probabilmente puoi chiamare 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

Penso che exec () sia sincrono e ritorna solo dopo che il processo è stato completato (anche se non ne sono sicuro al 100%), quindi sarà sufficiente leggere “out.svg” dopo. In ogni caso, con Google “chiamata di sistema java” verranno fornite maggiori informazioni su come eseguire correttamente questa parte.

Dai un’occhiata a pdf2svg :

Usare

 pdf2svg   [] 

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

 pdf2svg input.pdf output_page%d.svg all 

E per alcuni problemi di risoluzione 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