convertir pdf en svg

Je souhaite convertir des fichiers PDF en fichiers SVG. Veuillez suggérer des bibliothèques / exécutables capables de le faire efficacement. J’ai écrit mon propre programme java en utilisant les bibliothèques apache PDFBox et Batik –

PDDocument document = PDDocument.load( pdfFile ); DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); // Create an instance of org.w3c.dom.Document. Ssortingng 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); } 

Cette solution fonctionne très bien mais la taille des fichiers svg résultants est énorme (beaucoup plus grande que le pdf). J’ai trouvé le problème en regardant le svg dans un éditeur de texte. il entoure chaque caractère du document d’origine dans son propre bloc même si les propriétés de police des caractères sont identiques. Par exemple, le mot hello apparaîtra sous la forme de 6 blocs de texte différents. Est-il possible de corriger le code ci-dessus? ou s’il vous plaît suggérer une autre solution qui fonctionnera plus efficacement.

Inkscape peut également être utilisé pour convertir des fichiers PDF en fichiers SVG. C’est en fait remarquablement bien, et bien que le code qu’il génère soit un peu gonflé, à tout le moins, il ne semble pas avoir le problème particulier que vous rencontrez dans votre programme. Je pense qu’il serait difficile de l’intégrer directement dans Java, mais inkscape fournit une interface de ligne de commande pratique à cette fonctionnalité, de sorte que le moyen le plus simple d’y accéder serait probablement un appel système.

Pour utiliser l’interface de ligne de commande d’Inkscape pour convertir un fichier PDF en fichier SVG, utilisez:

 inkscape -l out.svg in.pdf 

Vous pouvez alors appeler avec probablement:

 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.Ssortingng%29

Je pense que exec () est synchrone et ne revient que lorsque le processus est terminé (bien que je ne sois pas sûr à 100%), vous devriez donc pouvoir lire “out.svg” après cela. Dans tous les cas, Google “java system call” donnera plus d’informations sur la façon de faire cette partie correctement.

Jetez un coup d’oeil à pdf2svg :

Utiliser

 pdf2svg   [] 

Lorsque vous utilisez all indiquez un nom de fichier contenant %d (qui sera remplacé par le numéro de page).

 pdf2svg input.pdf output_page%d.svg all 

Et pour certains dépannage, voir: http://www.calcmaster.net/personal_projects/pdf2svg/

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

contenu de to-svg.sh

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