2016-08-25 54 views
6

我有一個使用兩個已安裝的字體(Helvetica-NarrowHelvetica-Bold)一個簡單的測試SVG:使用ImageMagick將SVG轉換爲PDF並具有可靠的字體選擇?

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="50"> 
    <text x="0" y="24" fill="blue" font-family="Helvetica-Bold" font-size="24px">Bold</text> 
    <text x="0" y="48" fill="blue" font-family="Helvetica-Narrow" font-size="24px">Narrow</text> 
</svg> 

如果我將它轉換爲使用ImageMagick PDF文件(ImageMagick的7.0.2-0 Q16 x86_64的CentOS上的Linux 7上運行(Core)),那麼結果不會使用已安​​裝的字體。

例如:

$ convert -density 600 test.svg test.pdf 

收率:

default font applied

它看起來像ImageMagick的默認使用的Helvetica正常重量,這不匹配或者在指定的字體的家庭輸入SVG。

接下來,我嘗試指定輸入SVG中指定的其中一個字體的路徑。這是通過運行convert -list font確定的Helvetica-Bold字體的路徑。

$ convert -density 600 -font /net/module/sw/ghostscript-fonts/5.50-32/n019004l.pfb test-helvetica-mix.svg test-helvetica-mix-bold.pdf 

bold font specified

第一<text>元件是正確的 - 它使用Helvetica-Bold。第二個<text>元素不正確 - 它也使用Helvetica-Bold,但實際上應該使用Helvetica-Narrow

不過,我得到這種方法更接近,所以我嘗試添加路徑輸入SVG使用第二字體:

$ convert -density 600 -font /net/module/sw/ghostscript-fonts/5.50-32/n019004l.pfb -font /net/module/sw/ghostscript-fonts/5.50-32/n019043l.pfb test-helvetica-mix.svg test-helvetica-mix-both.pdf 

both font paths added

ImageMagick的使用Helvetica-Narrow字樣兩個元素,這是不正確的,同樣的原因。

有沒有辦法說服ImageMagick使用輸入SVG中的<text>元素中指定的正確字體?

+0

原始SVG是否在您的機器上正確渲染? IE瀏覽器。正確的字體? –

+0

ImageMagick是一款萬能轉換器。如果它有一種特定格式的問題,那就不會出乎意料。你有沒有嘗試過專門研究SVG的人?例如Apache Batik? https://xmlgraphics.apache.org/batik/tools/rasterizer.html –

+0

SVG是正確的。雖然我很欣賞其他工具的建議,但我應該注意到,我正在尋找指定問題的解決方案,即使ImageMagick與安裝的字體正確工作所特別需要的東西。 (討論其他工具可能是最好的,除了這個線程。) –

回答

2

在看什麼convert -list font

Font: Helvetica-Bold 
    family: Helvetica 
    style: Normal 
    stretch: Normal 
    weight: 700 
    glyphs: /usr/share/fonts/type1/gsfonts/n019004l.pfb 
Font: Helvetica-Narrow 
    family: Helvetica Narrow 
    style: Normal 
    stretch: Condensed 
    weight: 400 
    glyphs: /usr/share/fonts/type1/gsfonts/n019043l.pfb 

字體系列Helvetica-BoldHelvetica-NarrowHelveticaHelvetica Narrow。您可以通過使用附加的屬性上<text>像達到預期的效果(膽略/窄):

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="50"> 
    <text x="0" y="24" fill="blue" font-family="Helvetica" font-size="24px" font-weight="700">Bold</text> 
    <text x="0" y="48" fill="blue" font-family="Helvetica Narrow" font-size="24px" font-stretch="Condensed">Narrow</text> 
</svg> 

我研究,看看我們是否可以直接使用的類型名稱(Helvetica-BoldHelvetica-Narrow),但無濟於事,這是我能找到的唯一解決方案,這是ImageMagick的convert工具所推崇的。希望能幫助到你。

0

您需要明確字體的安裝位置:在SVG安裝中,操作系統或嵌入PDF中。

SVG有它自己的字體系統,這不會導致問題的結束。 SVG是在Web字體真正被使用之前首次製作的,所以SVG製作了自己的便攜式字體系統。現在只有SVG字體的字體系統,並且它們可能不會轉換爲PDF文件。

您最好的選擇是使用@font-face規則,例如@font-face { font-family: Helvetica; src: url('/var/www/fonts/Helvetica.ttf'); }。看到這個(https://graphicdesign.stackexchange.com/questions/5162/how-do-i-embed-google-web-fonts-into-an-svg/5167#5167)的另一個看法。

替代方法是完全放棄字體並讓SVG呈現所需的路徑。也就是說,使用呈現字體的圖形創建PDF。當使用Inkscape製作其他行程方向時(從PDF到SVG),這會顯示出來。 (見Convert PDF to clean SVG?https://www.magebay.com/forum/forums/topic/pdf-svg-doesnt-embed-the-fonts/)。

對不起,它不能解釋爲'添加這一行',而不知道更多的細節,但這應該有所幫助。

相關問題