58

PDFをSVGに変換したいのですが、これを効率的に実行できるライブラリ/実行可能ファイルを提案してください。私はapachePDFBoxとBatikライブラリを使用して独自のJavaプログラムを作成しました-

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

4

7 に答える 7

65

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システムコール」をグーグルで検索すると、その部分を正しく実行する方法に関する詳細情報が得られます。

于 2010-11-08T12:12:20.117 に答える
44

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/を参照してください。

于 2010-12-21T17:18:16.820 に答える
7

pdftocairopdfをsvgに変換するために使用できます。pdfcairopoppler-utilsの一部です。

たとえば、PDFの2ページ目を変換するには、次のコマンドを実行できます。

pdftocairo -svg -f 1 -l 1 input.pdf
于 2020-04-22T03:40:46.990 に答える
2
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
于 2017-10-10T06:40:37.740 に答える
0

inkscape@jbeard4)私にとっては、テキストがまったく含まれていないsvgを作成しましたが、ghostscriptを使用して仲介者としてpostscriptを使用することで、それを機能させることができました。

for page in $(seq 1 `pdfinfo $1.pdf | awk '/^Pages:/ {print $2}'`)
do
    pdf2ps -dFirstPage=$page -dLastPage=$page -dNoOutputFonts $1.pdf $1_$page.ps
    inkscape -z -l $1_$page.svg $1_$page.ps
    rm $1_$page.ps
done

ただし、これは少し面倒であり、使いやすさの勝者はpdf2svg@Koen.)に移動する必要があります。これは、そのallフラグがあり、ループする必要がないためです。

ただしpdf2svgCentOS 8では使用できません。これをインストールするには、次の手順を実行する必要があります。

git clone https://github.com/dawbarton/pdf2svg.git && cd pdf2svg
#if you dont have development stuff specific to this project
sudo dnf config-manager --set-enabled powertools
sudo dnf install cairo-devel poppler-glib-devel
#git repo isn't quite ready to ./configure
touch README
autoreconf -f -i
./configure && make && sudo make install

上記のghostscript-inkscapeよりも実際に見栄えのするsvgを生成しますが、フォントの方がラスターが優れているようです。

pdf2svg $1.pdf $1_%d.svg all

しかし、sudoがなくても、そのインストールは少し多すぎます。その上、pdf2svgはstdin / stdoutをサポートしていないので、すぐに利用できるpdftocairo@SuperNova)はこれらの点で扱いました。これは、以下の「高度な」使用例です。

for page in $(seq 1 `pdfinfo $1.pdf | awk '/^Pages:/ {print $2}'`)
do
    pdftocairo -svg -f $page -l $page $1.pdf - | gzip -9 >$1_$page.svg.gz
done

これは、pdf2svgと同じ品質とサイズ(圧縮前)のファイルを生成しますが、バイナリは同一ではありません(視覚的にも、文字の2つのピクセルの出力間をジャンプしますが、どちらもインクスケープのように間違っている/悪く見えません)。

于 2021-05-07T08:29:05.670 に答える
0

提案された、、、提案されていない問題や、USGSの地形図などの大きくて複雑なPDFを変換しようとしたときにinkscape、問題が発生しました。クラッシュすることもあれば、大量に膨らんだファイルを生成することもありました。私のユースケースでそれらすべてを正しく処理できた唯一のPDFからSVGへの変換ツールはdvisvgmでした。使い方はとても簡単です。pdf2svgpdftocairoconvertmutool

dvisvgm --pdf --output=file.svg file.pdf

要素の変換方法を処理したり、最適化したりするためのさまざまな追加オプションがあります。結果として得られるファイルは、必要に応じてsvgcleanerによって、知覚的な品質を損なうことなくさらに圧縮できます。

于 2021-05-21T16:41:08.140 に答える
0

Spire.PDF for .NETを使ってみませんか?無料版もあり、以下のコードに従って誰でもPDFファイルをSVG画像に変換できる方法を提供しています。

using Spire.Pdf;

namespace PDF_Page_to_SVG
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("Test.pdf");
            doc.SaveToFile("Result.svg", 0, 0, FileFormat.SVG);
        }
    }
}
于 2022-02-23T05:33:26.460 に答える