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


126

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

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

Google Chrome 16でSVGを開いてPDFに印刷しようとしましたが、すべての色が歪んでおり、一部の要素も削除されています。(SVGは画面上では正常に表示されますが、印刷プレビューではすでに不良であり、生成されたPDFも不良です。)

SVGをラスタライズまたはレンダリングしたくありません。SVGをビットマップイメージに変換してから、イメージが埋め込まれたPDFを作成するソリューションは、私の質問に対する答えではありません。(FYI Inscape 0.47は、PNGにレンダリングするとき、アンチエイリアスなしで、非常にい方法でテキストをレンダリングします。)

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


1
変換する画像が数枚しかない場合は、オンラインコンバーターの一部を使用する方が簡単な場合があります。CloudConvertを試してみたところ、SVGの半分のファイルサイズで非常に良い仕事をしました。
フランクブライトリング

回答:


134

rsvg-convertは、変換したいSVGのトリックを行いました:

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

rsvg-convert -f pdfSVGをラスタライズせず、フォントを埋め込み、サブセット化します(少なくとも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は、ツールは常にラスタライズされると記載されていますが、これは正しくありません。マニュアルは単に時代遅れです。場合によっては、svg生成ツールがsvg画像を部分的にラスタライズする可能性があり、これも誤解を招く可能性があります。


4
それは私がここで見ている多くの依存関係です:cairo、libgphoto、gtk3、libsane ...まあ、それが仕事をするなら
...-ShiDoiSi

4
@AyberkÖzgürそれはinkscapeの欠点です-Inkscapeプロジェクトを保存すると、デフォルトでそれをSVGとして保存しますが、保存するSVGには、他のプログラムを頻繁に台無しにする可能性のある非標準のinkscape固有のデータが含まれています。SVG として保存するだけでなく、SVGとしてエクスポートする必要があります。
AJMansfield

2
検索時間をいくらか節約できる可能性があります。Suse-Systemsでは、含まrsvg-convertれるパッケージはと呼ばれrsvg-viewます。
トレンディフィッシャー

1
それは私のために働いたし、pdfの品質はsvgと同じです。これ以前は、imagemagickを使用してpdfに変換していましたが、特にsvgの品質は劣っていました。
プラティックソニ

1
残念ながら、これはmacOSにフォントを埋め込みません。
オオフィッシュ

79

これはUbuntu Lucidで機能します。

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

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

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

また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

2
残念ながら、これはOS Xでは動作しないようです。それでもいい答えです。
コンラッドルドルフ

3
OPは、Inkscapeにレンダリングのバグがあることを指定しました。これは私の経験と一致します。
ディランサーストン14年

3
Homebrewを使用したOSXでは、brew install inkscape最近使用してInkscapeをインストールできます。結果/usr/local/bin/inkscapeは、X11.appを実行することなく、私のために働きました。
アレックスシュレーダー

2
InkscapeはからOS Xにインストールすることができますdmg。自身のウェブサイトで配布され、2つのシンボリックリンクを作成した後、コマンドラインから呼び出されたln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapeと同様のためのinkscape-bin(仮定は~/bin、あなたの中にあります$PATH)。
イオアニスフィリピディス16

2
Inkscapeで-z(または--without-gui)フラグを使用して、バッチモードでのみ実行できます(ウィンドウはまったく開きません)。
アーティファクト

8

OSXおよびUbuntuでCairoSVGを正常に使用しました。

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

CairoSVGドキュメント


使用できるpythonバインディングもあります。残念ながら、この方法はかなり制限されていることがわかりました。つまり、多くのsvg機能がサポートされていません。
ボードー

7

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

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

 convert file.svgz file.pdf 

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

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

svgを処理するプログラムがシステムにインストールされているかどうかを確認するには、単に試してください

 apropos -s 1 svg

これらのプログラムのマンページに説明があります。プログラムがsvgをpdfに変換するのに役立つかどうか。


18
ご提案ありがとうございます。FYI convertは元の質問に対する答えではありません。SVGをconvertビットマップイメージにラスタライズし、元の質問はそれを行わない解決策を探していたからです。
pts

5

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

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


3

Mac OSでは(すでにbrewがインストールされていると考えて)私は以下を行います:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

Linuxでも同じように機能しますが、代わりにapt-getを使用します。


1
これは、pdf出力でも機能します。svg2pdfおよびとrsvg-convertは対照的に、これはフォントを保持します。
オアフィッシュ

おかげで、間違った拡張子を付けました。例を更新しました。
エイドリエルジュニア

魅力のように働いた!
メイロップ

1

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

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

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


スーパーユーザーへようこそ!外部リンクが壊れたり、利用できなくなったりする可能性があります。その場合、答えはティーザーにすぎません。リンクはまだ機能しますが、コンテンツをインデックス化して、ユーザーが解決策を見つけられるようにすることはできません。回答に重要な情報を記載し、帰属と詳細についてはリンクを使用してください。ありがとう。
fixer1234

WSLからは、いくつかの追加のフラグが必要ですchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

0

Image Viewer(またはEye of Gnomeとも呼ばれます)でsvgファイルを開き、eogPDFファイル(たとえばimage.pdf)に印刷し、pdf2psコマンドを使用してそのpdfをepsに変換します。シンプル!

詳細な手順:

  1. Image Viewerまだ実行していない場合はインストールします(を使用する場合は、ほとんどありませんgnome

    sudo apt-get install eog
    
  2. でsvgファイルを開きeogimage.pdfファイルに出力します。

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

    pdfcrop image.pdf
    

    これによりimage-crop.pdf、周囲の空白が削除された状態で生成されます。

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

    pdf2ps image-crop.pdf image.eps
    

それでおしまい!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.