convertir pdf en svg

Je veux convertir PDF en SVG veuillez suggérer des bibliothèques/exécutables qui seront 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.
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);
    }

Cette solution fonctionne très bien mais la taille des fichiers svg résultants est énorme.(plusieurs fois plus grand que le pdf). J'ai compris où est le problème en regardant le svg dans un éditeur de texte. il enferme chaque caractère dans le document original dans son propre bloc même si la police propriétés des caractères est le même. Par exemple, le mot bonjour apparaîtra sous la forme de 6 blocs de texte différents. Existe-t-il un moyen de réparer le code ci-dessus? ou veuillez Suggérer une autre solution qui fonctionnera plus efficacement.

45
demandé sur user434541 2010-11-08 03:55:42

3 réponses

Inkscape peut également être utilisé pour convertir des fichiers PDF en SVG. C'est en fait remarquablement bon à cela, 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é, donc probablement le moyen le plus simple d'y accéder serait via un appel système.

À utiliser Interface de ligne de commande d'Inkscape pour convertir un PDF en SVG, utilisez:

inkscape -l out.svg in.pdf

Que vous pouvez alors probablement appeler en utilisant:

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

Je pense que exec() est synchrone et ne retourne qu'une fois le processus terminé (bien que je ne sois pas sûr à 100% de cela), donc vous devriez pouvoir simplement lire "out.svg " après cela. En tout cas, Googler "java appel système" donnera plus d'informations sur comment faire partie correctement.

53
répondu jbeard4 2010-11-08 12:12:20

Prendre un coup d'oeil à pdf2svg:

Utiliser

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

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

pdf2svg input.pdf output_page%d.svg all

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

31
répondu Koen. 2014-07-11 17:10:40
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
1
répondu Leblanc Meneses 2017-10-10 06:40:37