2012-08-14 11 views
13

Próbuję użyć rubin do generowania plików PDF przy użyciu krewetka na OS X. Mam następujący:Jak używać czcionki Arial z Prawn na OS X?

font 'Arial' 

Arial jest zainstalowany na komputerze Mac. Ale gdy próbuję wygenerować PDF, pojawia się następujący błąd:

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

Jak mogę uzyskać tę wspólną czcionki do pracy w Krewetka? W rzeczywistości prawie wszystko inne niż Helvetica lub Times New Roman rzuca ten sam błąd. Jest to część aplikacji Rails 3.2.

Gdy próbuję załadować plik ttf czcionki bezpośrednio, za sugestią Ashish jest poniżej, otrzymuję Bad font family wiadomość:

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 ma mały zestaw czcionek, a są one osadzone w gem. Oto [lista dostępnych czcionek] (https://github.com/prawnpdf/prawn/tree/master/data/fonts). Nie sądzę, że krewetki mogą używać czcionek zainstalowanych w systemie operacyjnym. – Augusto

Odpowiedz

28

Jeśli używasz opcji do połączeń :style do text, np

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

Następnie czcionki używasz w momencie musi mieć przypisaną rodzinę czcionek, inaczej dostaniesz „rodziny Bad czcionki” Błąd widzisz, na przykład to:

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

produkuje: Bad font family (RuntimeError).

W ten sposób zawsze należy podać dokładny plik czcionki, który ma być wyświetlany za każdym razem, gdy chcesz zmienić styl, np.

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

Lepszym rozwiązaniem byłoby, aby stworzyć rodzinę czcionek ze stylów chcesz:

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 

Po skonfigurowaniu rodzinę czcionek można po prostu użyć Arial jak nazwa czcionki, a możesz z łatwością korzystać z różnych stylów.

+0

SWEET! to zadziałało dla mnie – Kirk

4

spróbować przechodząc pełną ścieżkę arial.ttf do funkcji czcionki jak poniżej -

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

zobaczyć także kilka linków, które są istotne -

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

Przekazywanie pełnej ścieżki do pliku ttf nie działa. Właśnie dostaję błąd "Bad font family". – croceldon

+0

proszę zaksięgować pełne śledzenie błędów. a także próbowałeś z jakimkolwiek innym plikiem "ttf"? – saihgala

+0

Plik Verdana.ttf również zawiedzie z tą samą wiadomością. – croceldon

5

Miałem ten sam problem podczas próby załadowania takich czcionek.

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

Okazuje się, że Rails.root.join nie zwraca jawnego obiektu String. Rozwiązaniem jest dodanie do_s na końcu wyrażenia.

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

przez Rhizobium