web-dev-qa-db-ja.com

pdfをsvgに変換する

PDFをSVGに変換したい場合、これを効率的に実行できるライブラリ/実行可能ファイルを提案してください。Apacheを使用して独自のJavaプログラムを作成しましたPDFBoxおよび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);
    }

このソリューションはうまく機能しますが、結果のsvgファイルのサイズはhugeになります(pdfよりも何倍も大きい)。テキストエディタでsvgを見て、問題の場所を突き止めました。文字のフォントプロパティが同じであっても、元のドキュメントのすべての文字を独自のブロックで囲みます。たとえば、Word helloは6つの異なるテキストブロックとして表示されます。上記のコードを修正する方法はありますか?または、より効率的に機能する別のソリューションを提案してください。

47
user434541

Inkscapeは、PDF=をSVGに変換するためにも使用できます。実際、これは非常に優れています。生成されるコードは少し肥大化していますが、少なくとも、プログラムで発生している特定の問題があります。Javaに直接統合するのは難しいと思いますが、inkscapeはこの機能への便利なコマンドラインインターフェイスを提供するため、おそらく最も簡単なアクセス方法はシステムコール。

Inkscapeのコマンドラインインターフェイスを使用してPDFをSVGに変換するには、次を使用します。

inkscape -l out.svg in.pdf

これはおそらく次を使用して呼び出すことができます:

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

Exec()は同期的であり、プロセスが完了した後にのみ戻ると思います(それについては100%確信がありませんが)ので、その後は "out.svg"を読むことができます。いずれにせよ、グーグルの「Javaシステムコール」は、その部分を正しく行う方法に関する詳細情報を提供します。

55
jbeard4

pdf2svg を見てください:

使用するには

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

allを使用する場合は、%dを含むファイル名を指定します(ページ番号に置き換えられます)。

pdf2svg input.pdf output_page%d.svg all

そして、いくつかのトラブルシューティングについては、以下を参照してください: http://www.calcmaster.net/personal_projects/pdf2svg/

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

の内容 to-svg.sh

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