2012-08-14 11 views
13

sto cercando di utilizzare rubino per generare un PDF utilizzando Prawn su OS X. Ho il seguente:Come si usa il font Arial con Prawn su OS X?

font 'Arial' 

Arial è installato sul mio Mac. Ma quando provo a generare il PDF, ottengo il seguente errore:

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

Come posso ottenere questo tipo di carattere comune a lavorare in Prawn? In effetti, quasi tutto tranne Helvetica o Times New Roman lancia questo stesso errore. Questo fa parte di un'app Rails 3.2.

Se provo a caricare il file TTF carattere direttamente, per suggerimento di Ashish sotto, ottengo un messaggio Bad font family:

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

Prawn ha un piccolo set di font, e sono incorporati nel gioiello. Ecco una [lista dei caratteri disponibili] (https://github.com/prawnpdf/prawn/tree/master/data/fonts). Non penso che gamwn possa usare i font installati nel sistema operativo. – Augusto

risposta

28

Se si utilizza l'opzione :style alle chiamate a text, per esempio

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

Poi il tipo di carattere che si sta utilizzando al momento ha bisogno di avere una famiglia di caratteri associati, altrimenti si otterrà la “famiglia di font Bad” l'errore che stai vedendo, ad esempio, questo:

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

produce: Bad font family (RuntimeError).

Un modo per aggirare questo sarebbe specificare sempre il file di carattere esatto che si desidera ogni volta che si desidera modificare lo stile, ad es.

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

Una soluzione migliore sarebbe quella di creare una famiglia di font con gli stili che si desidera:

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 

Dopo aver impostato la famiglia di font si può semplicemente utilizzare Arial come il nome del font, e puoi usare facilmente i diversi stili.

+0

DOLCE! ha funzionato per me – Kirk

4

Prova a passare il percorso completo del arial.ttf alla funzione di carattere come qui sotto -

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

vedere anche alcuni link che sono rilevanti -

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

Non sembra funzionare il percorso completo del file ttf. Ho appena ricevuto l'errore 'Bad font family'. – croceldon

+0

si prega di inviare completa traccia di errore. e hai provato anche con un altro file "ttf"? – saihgala

+0

Anche il file Verdana.ttf non è riuscito con lo stesso messaggio. – croceldon

5

Ho avuto lo stesso problema cercando di caricare tipi di carattere come questo.

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

Si scopre che Rails.root.join non restituisce l'oggetto String esplicito. La soluzione è aggiungere to_s alla fine dell'espressione.

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

da ther