2012-06-18 9 views
5

Sto creando un generatore di documenti PDF in Ruby on Rails con Prawn gem e ho trovato il problema che quando ho caratteri cinesi, giapponesi e cirillici sono visualizzati in modo errato. Ho scoperto che è perché "quando sto generando il carattere che devo specificare, che tipo di carattere deve essere visualizzato il testo pdf con".Qualche font per generare pdf che gestirà il cinese, il cirillico ...?

Ora questo non è il problema, ma il fatto che i miei documenti includano tutti i diversi caratteri possibili che è gTLD supports.

Domanda 1:

Sapete qualsiasi tipo di carattere per la generazione di documenti PDF che includeranno maggior numero possibile di caratteri (asiatici, Europa, simboli, ...)? Idealmente tutti i caratteri supportati da gTLD.

so che Prawn di default include gkai00mp.ttf ma la sua focalizzata su caratteri cinesi e sto cercando liceità di includerli tutti (come Pokemon, avuto modo di catturarli tutti, so di essere chiedendo troppo, ma ancora ...)

Un altro problema è quando client apre questo documento:

domanda 2

è PDF generati da Prawn compreso il mio carattere in pdf file, quindi quando altri computer lo apriranno, il carattere sarà presente? È questo di default lo standard? O devo assicurare/forzare questa funzionalità?

+0

Si prega di [non cross-post] (http://superuser.com/questions/438257/pdf-fonts-that-include-all-possible-gtld-chars). So che la tua domanda qui è leggermente diversa, ma in sostanza è la stessa cosa. Sarebbe meglio affrontare questo problema alla radice - cioè, Ruby e Prawn. – slhck

+0

@slhck, è la stessa domanda ma non voglio sentire risposte formate da gruppi diversi, qui su SO mi aspetto risposte dagli sviluppatori che lavorano con gemma Prawn (o qualsiasi altra conversione in pdf) e ho riscontrato problemi simili con quella libreria, piuttosto su SuperUser voglio sentire soluzioni teoriche da persone che lavorano con PDF in nessun ambiente di programmazione ... È solo qui su SO. Mi aspetto solo meno risposte che su SU. – equivalent8

risposta

8

Ok, andando a rispondere da solo. Su SuperUser Ho chiesto domanda simile (concentrandosi su risposte in maniera più teorica), e la conclusione principale fu la risposta che:

Non v'è alcun carattere unico che supporta l'intera Unicode.

ma fortunatamente pdf supporta i caratteri di ripiego, e gamberi gioiello troppo.

qui è la mia soluzione:

1/impostare i font di ripiego

e

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

2/call

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

Ora, sto usando solo i font che sono inclusi in Prawn per impostazione predefinita, ma in questo modo puoi aggiungere diversi font con set di caratteri diversi e specificarli come fallback

Ad esempio puoi mettere i tuoi font da qualche parte in il tuo Rails root e solo li include da lì

nota nel carattere "Kai", sto specificando lo stesso carattere per normale, corsivo, grassetto, bold_italic senza stile. Lo sto facendo di proposito. Da quello che stavo vivendo il font gkai00mp non hanno caratteri in grassetto o caratteri in corsivo. Quindi, quando viene visualizzato il corsivo/grassetto, verrà stampato in stile normale (che è meglio che non renderlo affatto).

Se non specificare grassetto/corsivo per il tipo di carattere (exaple "Kai") ..

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

.. e si tenta di rendere char stile che cadrà-back a kai ...

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

... prendo

Prawn::Errors::UnknownFont in Foo 

    is not a known font. 

nota 2: se si vuole mettere non una caratteri SCII a Ruby di file è necessario mettere la codifica in cima al file

# coding: utf-8 

class Foo 
... 
end 

questo funziona però modulo Ruby 1.9. Rubino fonte 1.8.x può gestire solo ASCII (più su che in ruby 1.9 walkthrough by P.C. ma in Rails si dovrebbe usare I18n (internazionalizzazione)

nota 3

Prawn ha davvero ottima documentazione, basta git clone di gamberi da github e verificare ./manuals

2

Nel 2014 Google ha rilasciato i font Noto (https://www.google.com/get/noto/) e che comprende supporti per tutti i tipi di linguaggi. è possibile utilizzare TTF caratteri OTF o incorporare il tTC collezione completa per supportare la lingua desiderata. Per cinese, giapponese e coreano, NotoSansCJK funziona perfettamente

+0

interessante, buono a sapersi questo. Non lavoro più sul progetto a cui questa domanda era correlata, ma la prossima volta che incontrerò questo portatile proverò a usare la tua soluzione. – equivalent8

Problemi correlati