2013-05-30 27 views
5

Sto usando iText per creare un PDF con caratteri cinesi. Il carattere Ho specificato è MS Mincho che avevo caricata mediante il codice,iText per generare PDF con caratteri cinesi, ma non visualizzato

FontFactory.registerDirectory("c:/windows/Fonts/"); 

new Phrase("Asian 汉字/漢字 characters", FontFactory.getFont("MS Mincho", 16, Font.NORMAL)); 

Il seguente codice recupera adeguatamente il carattere MS Mincho (cioè non nullo),

FontFactory.getFont("MS Mincho", 16, Font.NORMAL) 

Tuttavia, il PDF generato solo visualizza il testo ASCII "caratteri asiatici", ovvero i caratteri cinesi non vengono visualizzati nel PDF.

Qualche idea sul motivo per cui i caratteri cinesi mancano nel PDF generato?

+1

è necessario assicurarsi che a) utilizza il carattere con un appropriato [encoding] (http://itextpdf.com/themes/keyword.php?id=394) ('BaseFont.IDENTITY_H') eb) [embed] (http://itextpdf.com/themes/keyword.php?id=71) (' BaseFont.EMBEDDED'). Lasciati ispirare dai campioni di [chaptrer 11] (http://itextpdf.com/book/chapter.php?id=11) di [iText in Action - 2nd Edition] (http://itextpdf.com/book/) . – mkl

+1

Grazie. Il PDF generato ora visualizza correttamente i caratteri cinesi. Non c'è bisogno di chiamare FontFactory.registerDirectory(). Basta usare BaseFont.createFont ("c: /windows/Fonts/MSMINCHO.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED) e istanziare Carattere (BaseFont, dimensione). FontFactory.getFont ("MS Mincho") non funziona con caratteri cinesi. –

+1

In realtà 'FontFactory' può essere utilizzato anche per creare oggetti font opportunamente parametrizzati. Ma vero, non ne hai bisogno. – mkl

risposta

2

Mentre il problema è stato risolto nei commenti, qui la risoluzione:

Si dovrebbe fare in modo che si a) utilizza il carattere con un appropriato encoding (BaseFont.IDENTITY_H) e b) embed esso (BaseFont.EMBEDDED). Lasciati ispirare dallo samples from chapter 11 di iText in Action — 2nd Edition.

BaseFont bf = BaseFont.createFont("c:/windows/Fonts/MSMINCHO.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font f = Font(bf, size); 

Ora utilizzare questo Font f.

Problemi correlati