2012-08-14 2 views
13

Ich versuche, Rubin zu verwenden, um eine PDF-Datei mit Garnelen auf OS X zu erzeugen. Aber wenn ich versuche, das PDF zu generieren, erhalte ich folgende Fehlermeldung:Wie verwende ich die Schriftart Arial mit Prawn unter OS X?</p> <pre><code>font 'Arial' </code></pre> <p>Arial installiert auf meinem Mac: Ich habe folgend

Prawn::Errors::UnknownFont in ProjectsController#show 
Arial is not a known font. 

Wie kann ich diese gemeinsame Schriftart erhalten in Garnelen zu arbeiten? In der Tat, fast alles andere als Helvetica oder Times New Roman wirft diesen gleichen Fehler. Dies ist Teil einer Rails 3.2 App.

Wenn ich versuche, die Schrift ttf-Datei direkt zu laden, per Ashish Vorschlag unten, erhalte ich eine Bad font family Nachricht:

RuntimeError (Bad font family): 
    app/pdfs/quote_sheet_pdf.rb:29:in `page_top' 
    app/pdfs/quote_sheet_pdf.rb:12:in `initialize' 
    app/controllers/projects_controller.rb:9:in `new' 
    app/controllers/projects_controller.rb:9:in `block (2 levels) in show' 
    app/controllers/projects_controller.rb:7:in `show' 
    config/initializers/quiet_assets.rb:7:in `call_with_quiet_assets' 
+0

Garnele hat eine kleine Gruppe von Schriftarten, und sie sind in der gem eingebettet. Hier ist eine [Liste der verfügbaren Schriftarten] (https://github.com/prawnpdf/prawn/tree/master/data/fonts). Ich glaube nicht, dass Garnelen Schriftarten verwenden können, die im Betriebssystem installiert sind. – Augusto

Antwort

28

Wenn Sie die :style Option, um Anrufe zu text verwenden, z.B.

text "Hello World", :style => :italic 

Dann wird die Schriftart, die Sie zur Zeit verwenden sind muss eine zugehörige Schriftfamilie haben, sonst werden Sie die „Bad Schriftfamilie“ erhalten Fehler Sie sehen, zum Beispiel dieses:

Prawn::Document.generate("output.pdf") do 
    font "/Library/Fonts/Arial.ttf" 
    text "Hello World", :style => :italic 
end 

produziert: Bad font family (RuntimeError).

Eine Möglichkeit, runden das wäre immer die genaue Schriftdatei geben Sie jedes Mal, wenn Sie Stil ändern möchten möchten, zum Beispiel

font "/Library/Fonts/Arial Italic.ttf" 
text "Hello World" 

Eine bessere Option Sie eine Schriftfamilie mit den Stilen zu schaffen wäre:

Prawn::Document.generate("output.pdf") do 

    font_families.update("Arial" => { 
    :normal => "/Library/Fonts/Arial.ttf", 
    :italic => "/Library/Fonts/Arial Italic.ttf", 
    :bold => "/Library/Fonts/Arial Bold.ttf", 
    :bold_italic => "/Library/Fonts/Arial Bold Italic.ttf" 
    }) 

    font "Arial" 
    text "Hello World" 
    text "Hello World", :style => :italic 
    text "Hello World", :style => :bold 
    text "Hello World", :style => :bold_italic 
end 

Nachdem Sie die Schriftfamilie eingerichtet haben Sie nur Arial als Schriftnamen verwenden können, und Sie können die verschiedenen Stile einfach verwenden.

+0

SÜSS! es hat für mich funktioniert – Kirk

4

versuchen, wie unten vollständigen Pfad von arial.ttf an die Schriftart Funktion übergeben -

Prawn::Document.generate("custom_font_usage.pdf") do 
    font "/path/to/fonts/arial.ttf" 
    text "this is a test " * 20 
end 

auch einige Links sehen, die relevant sind -

  1. How many fonts are available in Prawn?
  2. Garnelen Dokumentation - http://rubydoc.info/gems/prawn/0.12.0/frames
+0

Es ist nicht möglich, den vollständigen Pfad zur ttf-Datei zu übergeben. Ich bekomme nur einen 'Bad font family' Fehler. – croceldon

+0

posten Sie bitte die komplette Fehlerverfolgung. und hast du es auch mit anderen "ttf" -Dateien versucht? – saihgala

+0

Die Datei Verdana.ttf schlug ebenfalls mit derselben Nachricht fehl. – croceldon

5

Ich hatte das gleiche Problem versucht, Schriften wie diese zu laden.

@pdf.font_families.update(
    'Arial' => { :normal => Rails.root.join('public/arial.ttf'), 
       :bold => Rails.root.join('public/arialbd.ttf') } 
) 

Es stellt sich heraus, dass Rails.root.join explizites String-Objekt nicht zurückgibt. Die Lösung besteht darin, to_s am Ende des Ausdrucks hinzuzufügen.

@pdf.font_families.update(
    'Arial' => { :normal => Rails.root.join('public/arial.ttf').to_s, 
       :bold => Rails.root.join('public/arialbd.ttf').to_s } 
) 

von Ther

Verwandte Themen