LinuxでSVG(ラテン語のテキストといくつかの簡単なベクトルグラフィックを含む)をPDFに変換するにはどうすればよいですか。
Ubuntu LucidでInkscape 0.47を試しましたが、いくつかのサブグラフィックがランダムに移動し、出力PDFの一部の行が短くなります。グラフィックはまったく違って見えるので、その出力は役に立ちません。
SVGをGoogle Chrome 16で開いてPDFに印刷しようとしましたが、すべての色がゆがめられ、いくつかの要素も削除されました。 (SVGは画面上ではうまく表示されますが、印刷プレビューでは既に不良であり、生成されたPDFも不良です。)
SVGをラスタライズしたりレンダリングしたりしたくありません。 SVGをビットマップイメージに変換してからイメージが埋め込まれたPDFを作成する解決策は、私の質問に対する答えではありません。 (FYI Inscape 0.47では、PNGへのレンダリング時に、アンチエイリアスを使用せずにテキストが非常に見にくくなります。)
他にどのようなオプションがありますか?
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はlibX11を必要とするので、rsvg-convertはヘッドレスシステムにインストールするのが難しいかもしれません。
注:rsvg-convert
のmanページには、ツールは常にラスタライズすると書かれていますが、そうではありません。マニュアルは単に時代遅れです。あなたのsvg生成ツールがsvg画像を部分的にラスタライズすることができ、それもまたあなたを誤解させることがあります。
これは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
Inkscape(0.47も)からPDFへの印刷、およびPDFとして保存すること(ただし若干異なります)から良い結果が得られますが、これは手元のグラフィックに依存する可能性があります。
低解像度の代替案(私はそれを改善するためにスイッチを試していませんでした)は
convert file.svgz file.pdf
convert
はImageMagick
パッケージの一部です。ラスタライザは別のプログラムです。
rasterizer -m application/pdf file.svgz -d file.pdf
Svgsを処理するプログラムがあなたのシステムにインストールされているか調べるには、ただ試してみてください。
apropos -s 1 svg
これらのプログラムのマンページは、プログラムがsvgをpdfに変換するのに有用であれば、説明するべきです。
https://superuser.com/a/79064/19956 はGhostPDLの一部であるgsvgに言及しています。
私はUbuntu Lucidでgsvg ghostpdl-9.06を試しましたが、Inkscapeによって生成された2つのSVGでは失敗しました。一方のSVGにはテキストがあり、もう一方にはベクトルグラフィックしかありませんでした。 Inkscape拡張機能やクリップパスのない単純なグラフィックでも失敗しました。だから私はgsvgを使用可能なSVGからPDFへのコンバータとは考えていません。
Mac OSでは(あなたはすでにbrewがインストールされていることを考えると)私はします:
$ brew install cairo libffi python3
$ pip3 install cairosvg
$ cairosvg -o blah.pdf ./blah.svg
Linuxでも同じことが言えますが、代わりにapt-getを使ってください。
なぜこれまで言及されていなかったのか疑問に思っていますが、さまざまなsvg-> pdfコンバーターをテストし、最良のものはHeadless Chrome。私にとって最も正確な結果が得られます。 Chromeに切り替える前に、私はInkscapeのバグと戦おうとしていましたが、それらの多くは深刻すぎて、それについてはあまりできません(透明度のバグ、間違ったフォントなど)。
chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"
カスタムPDFサイズ(A4がデフォルト)を使用するにはいくつかの調整が必要ですが、グーグルやCSSおよびSVG属性で遊んだ後にカスタムサイズを設定することができました(チェックアウト stackoverflowのこの答え )
Image Viewer
(別名Eye of Gnome eog
)でsvgファイルを開き、それをPDFファイル(例えばimage.pdf
)に印刷し、pdf2ps
コマンドを使ってそのpdfをepsに変換します。シンプル!
詳細な手順:
まだ実行していない場合はImage Viewer
をインストールします(gnome
を使用している場合はほとんど考えられない手順)
Sudo apt-get install eog
eog
でsvgファイルを開き、image.pdf
ファイルに印刷します。
(オプション)pdfファイルから周囲の空白を削除します。
pdfcrop image.pdf
これは周囲の空白を取り除いたimage-crop.pdf
を生成します。
トリミングしたpdfをepsに変換します(pdfをトリミングしなかった場合は直接image.pdf
を使用してください)。
pdf2ps image-crop.pdf image.eps
それでおしまい!