2012-11-21 14 views
5

Sto stampando un file PDF esistente con informazioni aggiuntive utilizzando la libreria iText. Le informazioni extra sono testo che deve essere visualizzato in un font TTF personalizzato.Il font ttf incorporato iText non è visibile in Adobe Reader

Il problema è che il testo non è visibile solo in Adobe Reader. Altri visualizzatori PDF, come ad esempio il lettore eVince predefinito in Ubuntu e il lettore PDF online di Google, rendono il testo stampato nel font incorporato personalizzato.

ho cercato più codifiche, come ad esempio CP1251, BaseFont.Identity_H, ...

Il codice dove avviene la magia:

PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdf)); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("stamped.pdf")); 
PdfContentByte canvas = pdfStamper.getOverContent(1); 
String text = "The stamp"; 
BaseFont bf = BaseFont.createFont("assign.ttf", "Cp1251",BaseFont.EMBEDDED); 
canvas.beginText(); 
canvas.setColorFill(BaseColor.BLUE); 
canvas.setFontAndSize(bf, 13); 
canvas.moveText(310, 600); 
canvas.showText(text); 
pdfStamper.close(); 
+0

Quando vai su Documento> Proprietà e apri la scheda Caratteri, cosa vedi? Vedi il font? –

+0

Vedo il problema: probabilmente stai utilizzando una versione obsoleta di iText! –

risposta

5

Avete un problema di sintassi. Lo stato del testo in PDF è contrassegnato con BT e ET. Questi operatori vengono aggiunti utilizzando i metodi beginText() e endText(). Hai un BT, ma non lo ET. Adobe Reader è più rigido rispetto agli altri utenti (è per questo che preferisco Adobe Reader rispetto a tutti gli altri spettatori: le persone dovrebbero rispettare la sintassi durante la scrittura del codice).

Aggiungere la seguente riga prima di pdfStamper.close();

canvas.endText(); 

Meglio ancora, letto il mio book e scoprirete è possibile ridurre la complessità del codice utilizzando ColumnText.showTextAligned().

+1

Grazie Bruno, il marcatore finale ha risolto il problema su Adobe Reader. Anche i complimenti per la fantastica libreria iText. – nkr1pt

+0

Grazie per aver accettato la risposta: mi ha fatto guadagnare una reputazione 2000+ ;-) –

Problemi correlati