2011-11-17 47 views
0

我使用Rubyvis來生成SVG圖,然後允許用戶直接保存到SVG,或使用RMagick保存到其他一些格式。如何在使用RMagick/ImageMagick將SVG轉換爲PDF時提高質量?

SVG圖有一個設置的大小,它在SVG文件中指定。那麼在我看來,轉換成相同大小的PDF應該是微不足道的。

不幸的是,這似乎並非如此。我可以用這種方式生成一個PDF,但是如果我先在inkscape中打開SVG,然後以PDF格式打印到文件,它會比生成的PDF大得多(尺寸方面)。

更糟的是,PDF圖像質量很差。

我是否缺少Magick的一些說明?代碼如下:

image = Magick::Image::from_blob(svg_string_data) { self.format = 'SVG' } 
image[0].format = 'PDF' 
image[0].to_blob 

然後我將返回的值(PDF blob)直接寫入文件中。

回答

1

The answer comes to you based on a tip from cptjazz on github.

首先,在documentation for RMagick往往是錯的。我懷疑這是版本問題,因爲ImageMagick託管的文檔是v2.12.0,而我使用的是v2.13.1。無論哪種方式,這是你需要知道的。

該文檔聲稱您可以使用image[0]['pdf', 'use-cropbox'] = true,因爲true.to_s會生成字符串'true'。實際上,它需要一個明確的字符串,並且[]=方法只需要一個密鑰,而不是兩個。

我沒有試用pdf:use-trimbox,主要是因爲我想要一個也適用於postscript的選項。對於postscript,您應該只能稍微修改它,並將ps:use-cropbox設置爲'true',但是RMagick的文檔不清楚如何在PS,PS2或PS3上正確設置幾何圖形。 (通常在ImageMagick中,人們會將密度設置爲'300x300',幾何設置爲'24%')。出於某種原因,PS3格式的輸出文件不能像RMagick生成的PDF那樣進行縮放。但我離題了。

以下是我用於PDF:

image = Magick::Image::from_blob(svg_string) { self.format = 'SVG' } 
image[0].format = 'PDF' 
image[0]["use-cropbox"] = 'true' 
image[0].to_blob 

而且這裏是我用PS:

image = Magick::Image::from_blob(svg_string) { self.format = 'SVG' } 
page = image[0].page.dup 
image[0]["use-cropbox"] = 'true' 
image[0].format = 'PS3' 
image[0].density = '100x100' 
image[0].page = page 
image[0].to_blob 

出於某種原因,設置更高的密度使得圖像更小。爲什麼這應該是一個謎。

相關問題