web-dev-qa-db-ja.com

LinuxでSVGをPDFに変換する方法

LinuxでSVG(ラテン語のテキストといくつかの簡単なベクトルグラフィックを含む)をPDFに変換するにはどうすればよいですか。

Ubuntu LucidでInkscape 0.47を試しましたが、いくつかのサブグラフィックがランダムに移動し、出力PDFの一部の行が短くなります。グラフィックはまったく違って見えるので、その出力は役に立ちません。

SVGをGoogle Chrome 16で開いてPDFに印刷しようとしましたが、すべての色がゆがめられ、いくつかの要素も削除されました。 (SVGは画面上ではうまく表示されますが、印刷プレビューでは既に不良であり、生成されたPDFも不良です。)

SVGをラスタライズしたりレンダリングしたりしたくありません。 SVGをビットマップイメージに変換してからイメージが埋め込まれたPDFを作成する解決策は、私の質問に対する答えではありません。 (FYI Inscape 0.47では、PNGへのレンダリング時に、アンチエイリアスを使用せずにテキストが非常に見にくくなります。)

他にどのようなオプションがありますか?

120
pts

rsvg-convertは私が変換したいSVGのためのトリックをしました:

$ Sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg

rsvg-convert -f pdfはSVGをラスタライズしません、そしてそれは(少なくともそれはArialフォントの使用された文字を埋め込んでいます)フォントを埋め込みそしてサブセットします。フォントの埋め込みが失敗することがあり(LMRoman17フォントなど)、フォントファイル全体が生成されたPDFにコピーされることがあります。

Ubuntu Lucidへの依存関係:

  • libcairo.so.2
  • libgobject-2.0.so.0
  • libgthread-2.0.so.0
  • libglib-2.0.so.0
  • librsvg-2.so.2
  • libpthread.so.0
  • libc.so.6

デフォルトでは、libcairoはlibX11を必要とするので、rsvg-convertはヘッドレスシステムにインストールするのが難しいかもしれません。

注:rsvg-convertのmanページには、ツールは常にラスタライズすると書かれていますが、そうではありません。マニュアルは単に時代遅れです。あなたのsvg生成ツールがsvg画像を部分的にラスタライズすることができ、それもまたあなたを誤解させることがあります。

128
pts

これはUbuntu Lucidで動作します。

$ Sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf

上記のコマンドラインInkscape呼び出しは、GUIなしでヘッドレスモードでも機能します(DISPLAY=)。ただし、Inscapeをインストールすると、X11を含む多くの依存関係がインストールされます。

エラーが発生しても、Inskscapeの終了ステータスは常に0であることに注意してください。そのため、その標準エラー出力に注意してください。

たくさんのドキュメントをまとめて変換するのに適したinkscape --Shellもあります。これは各ファイルのための遅いInkscapeの起動時間を避けます:

$ (echo t.svg --export-pdf=t.pdf;
   echo u.svg --export-pdf=u.pdf) |
  DISPLAY= inkscape --Shell

InkscapeはSVGを単純化するのにも役立ちます。

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
75
pts

Inkscape(0.47も)からPDFへの印刷、およびPDFとして保存すること(ただし若干異なります)から良い結果が得られますが、これは手元のグラフィックに依存する可能性があります。

低解像度の代替案(私はそれを改善するためにスイッチを試していませんでした)は

 convert file.svgz file.pdf 

convertImageMagickパッケージの一部です。ラスタライザは別のプログラムです。

 rasterizer -m application/pdf file.svgz -d file.pdf 

Svgsを処理するプログラムがあなたのシステムにインストールされているか調べるには、ただ試してみてください。

 apropos -s 1 svg

これらのプログラムのマンページは、プログラムがsvgをpdfに変換するのに有用であれば、説明するべきです。

7
user unknown

私はCairoSVGをOSXとUbuntuでうまく使いました。

pip install cairosvg
cairosvg in.svg -o out.pdf

CairoSVGドキュメント

6
SYK

https://superuser.com/a/79064/19956 はGhostPDLの一部であるgsvgに言及しています。

私はUbuntu Lucidでgsvg ghostpdl-9.06を試しましたが、Inkscapeによって生成された2つのSVGでは失敗しました。一方のSVGにはテキストがあり、もう一方にはベクトルグラフィックしかありませんでした。 Inkscape拡張機能やクリップパスのない単純なグラフィックでも失敗しました。だから私はgsvgを使用可能なSVGからPDFへのコンバータとは考えていません。

5
pts

Mac OSでは(あなたはすでにbrewがインストールされていることを考えると)私はします:

$ brew install cairo libffi python3
$ pip3 install cairosvg

$ cairosvg -o blah.pdf ./blah.svg 

Linuxでも同じことが言えますが、代わりにapt-getを使ってください。

3
Adriel Jr

なぜこれまで言及されていなかったのか疑問に思っていますが、さまざまなsvg-> pdfコンバーターをテストし、最良のものはHeadless Chrome。私にとって最も正確な結果が得られます。 Chromeに切り替える前に、私はInkscapeのバグと戦おうとしていましたが、それらの多くは深刻すぎて、それについてはあまりできません(透明度のバグ、間違ったフォントなど)。

 chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"

カスタムPDFサイズ(A4がデフォルト)を使用するにはいくつかの調整が必要ですが、グーグルやCSSおよびSVG属性で遊んだ後にカスタムサイズを設定することができました(チェックアウト stackoverflowのこの答え

1
Avael Kross

Image Viewer(別名Eye of Gnome eog)でsvgファイルを開き、それをPDFファイル(例えばimage.pdf)に印刷し、pdf2psコマンドを使ってそのpdfをepsに変換します。シンプル!

詳細な手順:

  1. まだ実行していない場合はImage Viewerをインストールします(gnomeを使用している場合はほとんど考えられない手順)

    Sudo apt-get install eog
    
  2. eogでsvgファイルを開き、image.pdfファイルに印刷します。

  3. (オプション)pdfファイルから周囲の空白を削除します。

    pdfcrop image.pdf
    

    これは周囲の空白を取り除いたimage-crop.pdfを生成します。

  4. トリミングしたpdfをepsに変換します(pdfをトリミングしなかった場合は直接image.pdfを使用してください)。

    pdf2ps image-crop.pdf image.eps
    

それでおしまい!

0
codeman48