2012-06-18 3 views
5

Ich erstelle Generator von PDF-Dokumenten in Ruby on Rails mit Prawn Edelstein und ich kam mit Problem, dass, wenn ich chinesische, japanische und kyrillische Zeichen habe sie falsch angezeigt werden. Ich habe gegooglet, dass es ist, weil "wenn ich Schriftart erzeuge, muss ich angeben, welche Schriftart sollte PDF-Text mit" gerendert werden.Jede Schriftart zum Erzeugen von PDF, die Chinesisch, Kyrillisch ... behandelt?

Jetzt ist dies nicht das Problem, aber die Tatsache, dass meine Dokumente alle verschiedenen möglichen Zeichen enthalten, dass gTLD supports.

Frage 1:

Kennen Sie jede Schriftart für PDF-Dokumente zu erzeugen, die möglichst viele Zeichen (Asian, Europa, Symbole, ...) enthalten wird? Idealerweise alle Zeichen, die gTLD unterstützt.

Ich weiß, dass Prawn enthält standardmäßig gkai00mp.ttf aber seine auf chinesische Zeichen konzentriert und ich suche Zulässigkeits sie alle (wie Pokemon zu schließen, haben sie alle zu fangen, ich weiß, ich bin auch für viel verlangt, aber immer noch ...)

Ein weiteres Problem ist, wenn Kunde dieses Dokument öffnet:

Frage 2

pdf von Garnelen einschließlich meiner Schrift im pDF erzeugt werden Datei, wenn andere Computer es öffnen, wird die Schriftart vorhanden sein? Ist das standardmäßig Standard? Oder muss ich diese Funktionalität sicherstellen/erzwingen?

+0

Bitte [nicht cross-post] (http://superuser.com/questions/438257/pdf-fonts-that-include-all-possible-gtld-chars). Ich weiß, dass deine Frage hier etwas anders ist, aber im Wesentlichen ist es dasselbe. Es wäre am besten, dieses Problem an der Wurzel anzugehen - also Ruby und Prawn. – slhck

+0

@slhck, es ist die gleiche Frage, aber ich möchte Antworten von verschiedenen Gruppen hören. Hier auf SO erwarte ich Antworten von Entwicklern, die mit Prawn (oder einem anderen PDF-Konverter) gearbeitet haben und ähnliche Probleme mit dieser Bibliothek hatten. eher auf SuperUser Ich möchte theoretische Lösungen von Leuten hören, die mit PDFs in keiner Programmierumgebung arbeiten ... Es ist nur hier auf SO ich erwarte nur weniger Antwort als auf SU. – equivalent8

Antwort

8

Ok, ich werde es selbst beantworten. Auf SuperUser fragte ich ähnliche Frage (auf Antworten in mehr theoretischen Art und Weise Fokussierung), und die wichtigste Schlussfolgerung war, dass beantworten:

Es gibt keine einzige Schrift, die ganz Unicode unterstützt.

aber zum Glück pdf unterstützt Fall-Back-Schriftarten und Garnele Juwel zu.

hier ist meine Lösung:

1/stellen Sie Ihren Fall-Back-Fonts

und

def fallback_fonts 
    ["dejavu", "times", 'kai', 'action_man'] 
end 

2/Anruf

font("Helvetica", size: 14) do #keyword "Helvetica" is specified in Prawn by default 
    text "址 foo", :fallback_fonts => fallback_fonts 
end 

Hier verwende ich nur die Schriften, die standardmäßig in Prawn enthalten sind, aber auf diese Weise können Sie mehrere Schriften mit unterschiedlichen Zeichensätzen hinzufügen und sie einfach als

angeben. Zum Beispiel können Sie Ihre Schriften irgendwo einfügen Ihr Rails-Root und einfach nur von dort

Hinweis in "Kai" Schriftart, ich bin die gleiche Schriftart für normal, kursiv, fett, bold_italic ohne Styling. Ich mache das absichtlich. Von dem, was ich erlebt habe gkai00mp Schriftart haben keine fetten Zeichen oder Kursivzeichen. Wenn also kursiv/fett formatiert wird, wird es im normalen Stil gedruckt (was besser ist, als gar nicht zu rendern).

Wenn ich nicht fett/kursiv für Schrift (exaple "Kai") angeben ..

font_families.update(
     "kai" => { 
     :normal => { :file => kai, :font => "Kai" } 
     } 
    ) 

.. und Sie versuchen, gestylt char zu machen, die zu kai fallen-zurück ...

text "<b>址 foo</b>", :fallback_fonts => fallback_fonts, :inline_format=>true 

... werde ich

Prawn::Errors::UnknownFont in Foo 

    is not a known font. 

Anmerkung 2 erhalten:, wenn Sie nicht-a setzen wollen scii Zeichen ruby ​​Datei-Codierung an Anfang der Datei

# coding: utf-8 

class Foo 
... 
end 

dies jedoch funktioniert Form Ruby 1.9 setzen müssen. Ruby 1.8.x-Quelle kann in ruby 1.9 walkthrough by P.C. ASCII nur (mehr dazu handhaben, aber in Rails sollten Sie I18n (Internationalisierung)

Anmerkung 3

Garnelen hat wirklich große Dokumentation, nur git clone Garnele von Github und überprüfen ./manuals

2

Im Jahr 2014 hat google Noto-Schriften veröffentlicht (https://www.google.com/get/noto/) und das schließt stützen für alle Arten von Sprachen. Sie können ttf, OTF Schriftarten oder betten die komplette Sammlung ttc verwenden, um die gewünschte Sprache zu unterstützen. Für Chinesisch, Japanisch und Koreanisch, NotoSansCJK funktioniert perfekt.

+0

interessant, gut zu wissen. Ich arbeite nicht mehr an dem Projekt, mit dem diese Frage verbunden war, aber wenn ich das nächste Mal auf dieses tragbare Gerät stoße, werde ich versuchen, Ihre Lösung zu verwenden. – equivalent8

Verwandte Themen