題 如何在Linux上將SVG轉換為PDF


如何在Linux上將PDF和(包含一些拉丁文本和一些簡單的矢量圖形)轉換為PDF?

我在Ubuntu Lucid上嘗試過Inkscape 0.47,但它會隨機移動一些子圖形,並且它會在輸出PDF中縮短一些線條。所以它的輸出是無用的,因為圖形看起來完全不同。

我嘗試在Google Chrome 16中打開SVG並將其打印為PDF,但它會扭曲所有顏色,並且還會刪除一些元素。 (SVG在屏幕上顯示正常,但在打印預覽中已經很糟糕,生成的PDF也很糟糕。)

我不想光柵化或渲染SVG。將SVG轉換為位圖圖像然後創建嵌入圖像的PDF的解決方案不是我的問題的答案。 (FYI Inscape 0.47渲染到PNG時渲染文本是一種非常難看的方式,沒有抗鋸齒。)

我還有其他選擇嗎?


108
2018-01-22 12:17


起源


如果您只是要轉換一些圖像,您可能會發現使用某些在線轉換器更容易。我試過了 CloudConvert 並且它的工作量非常好,SVG的文件大小只有一半。 - Frank Breitling


答案:


RSVG-轉換 為我想要轉換的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 聲明該工具總是光柵化,但事實並非如此。手冊簡直過時了。有時你的svg生成工具可以部分柵格化svg圖像,這也可能誤導你。


118
2018-01-22 12:28



這是我在這裡看到的很多依賴:cairo,libgphoto,gtk3,libsane ......哦,好吧,如果它能完成...... - ShiDoiSi
這會轉換為cmyk色彩空間嗎? - justingordon
@AyberkÖzgür這是inkscape的錯 - 當你保存一個Inkscape項目時,它會默認將它保存為SVG,但它保存的SVG包含一堆非標準的特定於inkscape的數據,這些數據經常會弄亂其他程序。你需要 出口 作為SVG而不僅僅是 保存 作為SVG。 - AJMansfield
可能會節省一些時間搜索:在Suse-Systems上包含的包 rsvg-convert 叫做 rsvg-view。 - Trendfischer
它對我有用,pdf的質量與svg相同。在此之前使用imagemagick轉換為pdf並且質量很差,尤其是svg。 - Pratik Soni


這適用於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

66
2017-11-16 20:23



不幸的是,這似乎不適用於OS X.仍然,很好的答案。 - Konrad Rudolph
OP指定Inkscape有渲染錯誤;這符合我的經驗。 - Dylan Thurston
在使用Homebrew的OSX上,您可以使用安裝Inkscape brew install inkscape 這些日子。所結果的 /usr/local/bin/inkscape 為我工作而無需運行X11.app。 - Alex Schröder
Inkscape可以從OS安裝在OS X上 dmg 分佈在自己的網站上,然後在創建兩個符號鏈接後從命令行調用: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscape 並且類似地 inkscape-bin (假設 ~/bin 在你的 $PATH)。 - Ioannis Filippidis
你可以使用 -z (要么 --without-gui)使用Inkscape標記僅以批處理模式運行它(根本不會打開任何窗口)。 - Artefact2


從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非常有用。


7
2018-01-22 12:40



謝謝你的建議。 FYI convert 不是原來問題的答案,因為 convert 將SVG柵格化為位圖圖像,原始問題是尋找不能做到這一點的解決方案。 - pts


https://superuser.com/a/79064/19956 提到 gsvg,GhostPDL的一部分。

我在Ubuntu Lucid上嘗試了gsvg ghostpdl-9.06,但是Inkscape生成的兩個SVG失敗了。一個SVG中有文本,另一個只有矢量圖形。沒有Inkscape擴展或剪輯路徑的簡單圖形也失敗了。所以我不認為gsvg是一個可用的SVG-to-PDF轉換器。


5
2017-11-16 20:18





我在OSX和Ubuntu上成功使用了CairoSVG。

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

CairoSVG文檔


5
2017-12-21 06:04



甚至可以使用python綁定。不幸的是,我發現這種方法相當有限,即不支持很多svg功能。 - bodo


在Mac OS上(考慮到你已經安裝了brew)我做:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

同樣適用於Linux,但使用apt-get。


1
2017-07-27 18:56



這也適用於pdf輸出。與之相反 svg2pdf 和 rsvg-convert,這保留了字體。 - oarfish
謝謝,我把錯誤的擴展。我更新了這個例子。 - Adriel Jr


用。打開svg文件 Image Viewer (也稱為侏儒之眼 eog並將其打印成PDF文件(比如說) image.pdf並使用將該pdf轉換為eps pdf2ps 命令。簡單!

詳細步驟:

  1. 安裝 Image Viewer 如果還沒有完成(如果你使用的話,步驟非常不可能) gnome

    sudo apt-get install eog
    
  2. 用。打開svg文件 eog 並打印到 image.pdf 文件。

  3. (可選)從pdf文件中刪除周圍的空格:

    pdfcrop image.pdf
    

    這將產生 image-crop.pdf 刪除了周圍的空格。

  4. 將裁剪的pdf轉換為eps(使用 image.pdf 直接,如果你沒有裁剪pdf)

    pdf2ps image-crop.pdf image.eps
    

而已!


0
2017-11-05 08:23