webentwicklung-frage-antwort-db.com.de

pdf in svg konvertieren

Ich möchte PDF zu SVG konvertieren. Bitte schlagen Sie einige Bibliotheken/ausführbare Dateien vor, die dies effizient ausführen können. Ich habe mein eigenes Java) - Programm mit dem Apache geschrieben PDFBox- und Batik-Bibliotheken -

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);
    }

Diese Lösung funktioniert gut, aber die Größe der resultierenden SVG-Dateien ist riesig (um ein Vielfaches größer als das PDF). Ich habe herausgefunden, wo das Problem liegt, indem ich das SVG in einem Texteditor betrachtete. Jedes Zeichen im Originaldokument wird in einem eigenen Block eingeschlossen, auch wenn die Schrifteigenschaften der Zeichen identisch sind. Beispielsweise wird das Begrüßungswort als 6 verschiedene Textblöcke angezeigt. Gibt es eine Möglichkeit, den obigen Code zu korrigieren? oder schlagen Sie eine andere Lösung vor, die effizienter funktioniert.

47
user434541

Inkscape kann auch zum Konvertieren von PDF in SVG verwendet werden. Das ist tatsächlich bemerkenswert gut, und obwohl der erzeugte Code ein bisschen aufgebläht ist, scheint es zumindest nicht so Ich denke, es wäre schwierig, es direkt in Java zu integrieren, aber inkscape bietet eine komfortable Befehlszeilenschnittstelle für diese Funktionalität Systemaufruf.

Verwenden Sie zur Konvertierung einer PDF in eine SVG-Datei die Inkscape-Befehlszeilenschnittstelle:

inkscape -l out.svg in.pdf

Was Sie dann wahrscheinlich anrufen können mit:

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

Ich denke exec () ist synchron und kehrt erst zurück, nachdem der Prozess abgeschlossen ist (obwohl ich nicht 100% sicher bin), also solltest du in der Lage sein, "out.svg" zu lesen. In jedem Fall liefert Googeln "Java-Systemaufruf" mehr Informationen darüber, wie dieser Teil korrekt ausgeführt wird.

55
jbeard4

Schauen Sie sich pdf2svg an:

Verwenden von

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

Wenn Sie all verwenden, geben Sie einen Dateinamen mit %d darin (wird durch die Seitenzahl ersetzt).

pdf2svg input.pdf output_page%d.svg all

Informationen zur Fehlerbehebung finden Sie unter: http://www.calcmaster.net/personal_projects/pdf2svg/

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

inhalt von to-svg.sh

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