如何在 Linux 上將 SVG(包含一些拉丁文字和一些簡單的向量圖形)轉換為 PDF?
我在 Ubuntu Lucid 上嘗試了 Inkscape 0.47,但它會隨機移動一些子圖形,並且會使輸出 PDF 中的一些行變短。所以它的輸出是沒有用的,因為圖形看起來完全不同。
我嘗試在 Google Chrome 16 中開啟 SVG 並將其列印為 PDF,但它扭曲了所有顏色,並且還刪除了一些元素。 (SVG 在螢幕上顯示正常,但在列印預覽中已經很糟糕,生成的 PDF 也很糟糕)
我不想光柵化或渲染 SVG。將 SVG 轉換為點陣圖影像,然後建立嵌入影像的 PDF 的解決方案並不能解決我的問題。 (僅供參考,當渲染為 PNG 時,Inscape 0.47 渲染文字的方式非常難看,沒有抗鋸齒)
Q還有其他選擇嗎?
答案1
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 影像,這也會誤導您。
答案2
這適用於 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
答案3
答案4
從 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 是否有用。