2016-08-25 56 views
6

Mam prosty test, który wykorzystuje dwa SVG zainstalowanych czcionek (Helvetica-Narrow i Helvetica-Bold):Konwersja SVG na PDF za pomocą ImageMagick przy użyciu niezawodnego doboru czcionek?

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

Gdybym przekonwertować to do pliku PDF przy użyciu ImageMagick (ImageMagick 7.0.2-0 Q16 x86_64 działa na CentOS Linux 7 (Core)), a następnie wynik nie używa zainstalowanych czcionek.

Na przykład:

$ convert -density 600 test.svg test.pdf 

Plony:

default font applied

Wygląda domyślnych ImageMagick do korzystania z normalnej wadze Helvetica, który nie pasuje do żadnej z rodzin czcionek określonych w wprowadź SVG.

Następnie próbuję określić ścieżkę do jednej z krojów pisma określonych w wejściowym SVG. Jest to ścieżka do kroju czcionki Helvetica-Bold, określona na podstawie uruchomienia convert -list font.

$ 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

Pierwszy <text> elementem jest poprawny - używa Helvetica-Bold. Drugi element <text> jest niepoprawny - używa także Helvetica-Bold, ale naprawdę powinien używać Helvetica-Narrow.

Mimo to, jestem coraz bliżej z tym podejściem, więc spróbuj dodać ścieżkę do drugiego czcionki stosowanej w SVG wejściowych:

$ 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 używa Helvetica-Narrow krój zarówno elementy, które są nieprawidłowe z tego samego powodu.

Czy istnieje sposób przekonania ImageMagick do użycia poprawnych krojów pisma określonych w elementach <text> w wejściowym SVG?

+0

Czy oryginalny SVG renderuje się poprawnie na twoim komputerze? To znaczy. z poprawnymi czcionkami? –

+0

ImageMagick to konwerter typu "jack-of-all-teses". Nie byłoby nieoczekiwane, gdyby miało problemy z jednym konkretnym formatem. Czy próbowałeś takiego, który specjalizuje się w SVG? Na przykład Apache Batik? https://xmlgraphics.apache.org/batik/tools/rasterizer.html –

+0

SVG jest poprawny. Chociaż doceniam sugestie dotyczące innych narzędzi, powinienem zauważyć, że szukam rozwiązania określonego problemu, tj. Tego, co jest szczególnie wymagane, aby ImageMagick działał poprawnie z zainstalowanymi krojami pisma. (Dyskusja o innych narzędziach prawdopodobnie byłaby najlepsza poza tym wątkiem). –

Odpowiedz

2

Patrząc na jakim convert -list font mówi

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 

Rodzina czcionek dla Helvetica-Bold i Helvetica-Narrow to Helvetica i Helvetica Narrow odpowiednio.Można osiągnąć zamierzony efekt (śmiałość/ciasnoty) za pomocą dodatkowych atrybutów <text> jak:

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

badałem, aby zobaczyć, czy możemy bezpośrednio używać nazwy typu (Helvetica-Bold, Helvetica-Narrow), ale bezskutecznie tym, to jedyne rozwiązanie, jakie mogę znaleźć, a które jest respektowane przez narzędzie ImageMagick's convert. Mam nadzieję, że to pomoże.

0

Musisz wyjaśnić, gdzie są zainstalowane czcionki: w instalacji SVG, systemie operacyjnym lub osadzone w pliku PDF.

SVG ma własny system czcionek, który nie powoduje końca problemów. SVG powstało po raz pierwszy, zanim czcionki sieciowe były naprawdę w użyciu, więc SVG stworzył własny system czcionek, który był przenośny. Teraz masz system czcionek tylko dla czcionek SVG i prawdopodobnie nie przekształcają się one w plik PDF.

Najlepiej najlepiej jest użyć zasady @font-face, np. @font-face { font-family: Helvetica; src: url('/var/www/fonts/Helvetica.ttf'); }. Zobacz ten (https://graphicdesign.stackexchange.com/questions/5162/how-do-i-embed-google-web-fonts-into-an-svg/5167#5167) dla innego widoku.

Alternatywnym rozwiązaniem jest całkowite zrezygnowanie z czcionek i sprawdzenie, czy ścieżka SVG wyświetla pożądaną ścieżkę. Oznacza to, że należy utworzyć plik PDF z grafiką, która jest renderowaną czcionką. To pokazuje się, kiedy Inkscape wykonuje inny kierunek podróży, z PDF na SVG. (patrz Convert PDF to clean SVG? lub https://www.magebay.com/forum/forums/topic/pdf-svg-doesnt-embed-the-fonts/).

Niestety nie sprowadza się do "dodawania tej linii", nie wiedząc o szczegółach, ale powinno to pomóc.