2012-08-14 19 views
13

estoy tratando de utilizar rubí para generar un PDF con gambas en OS X. Tengo el siguiente:¿Cómo uso la fuente Arial con Gamba en OS X?

font 'Arial' 

Arial está instalado en mi Mac. Pero cuando intento para generar el PDF, me sale el siguiente error:

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

¿Cómo puedo obtener esta fuente común de trabajar en la gamba? De hecho, casi cualquier cosa que no sea Helvetica o Times New Roman arroja el mismo error. Esto es parte de una aplicación de Rails 3.2.

Si intento cargar el archivo TTF directamente, por sugerencia de Ashish continuación, aparece un mensaje de 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

gamba tiene un pequeño conjunto de fuentes, y se incrusta en la gema. Aquí hay una [lista de las fuentes disponibles] (https://github.com/prawnpdf/prawn/tree/master/data/fonts). No creo que gamba pueda usar fuentes instaladas en el sistema operativo. – Augusto

Respuesta

28

Si está utilizando la opción :style a llamadas a text, por ejemplo,

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

A continuación, la fuente que está utilizando en ese momento necesita tener una familia de fuentes asociado, de lo contrario obtendrá la “familia Malo fuente” error que se está viendo, por ejemplo, esto:

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

produce: Bad font family (RuntimeError).

Una forma de evitar esto sería especificar siempre el archivo de fuente exacto que desea cada vez que desea cambiar el estilo, p. Ej.

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

Una mejor opción sería la creación de una familia de fuentes con los estilos que desee:

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 

Después de haber configurado la familia de fuentes que sólo puede utilizar Arial como el nombre de la fuente, y puedes usar los diferentes estilos fácilmente

+0

¡DULCE! funcionó para mí – Kirk

4

tratar de pasar la ruta completa del arial.ttf a la función de la fuente de la siguiente manera -

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

ver también algunos enlaces que son relevantes -

  1. How many fonts are available in Prawn?
  2. documentación de gambas - http://rubydoc.info/gems/prawn/0.12.0/frames
+0

Pasar la ruta completa al archivo ttf no parece funcionar. Acabo de recibir el error 'Bad font family'. – croceldon

+0

por favor, publique el rastro de error completo. y también lo intentó con cualquier otro archivo "ttf"? – saihgala

+0

El archivo Verdana.ttf también falló con el mismo mensaje. – croceldon

5

Tuve el mismo problema al intentar cargar fuentes como esta.

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

Resulta que Rails.root.join no devuelve explícitamente el objeto String. La solución es agregar to_s al final de la expresión.

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

por Ther