Ho una tabella nella pagina di asp.net, e cercando di esportare come file PDF, ho paio di caratteri internazionali che non sono visualizzati nel file PDF generato, qualche suggerimento,iTextSharp testo internazionale
Grazie a advance
Ho una tabella nella pagina di asp.net, e cercando di esportare come file PDF, ho paio di caratteri internazionali che non sono visualizzati nel file PDF generato, qualche suggerimento,iTextSharp testo internazionale
Grazie a advance
Si può provare a impostare la codifica per il carattere che si sta utilizzando. In Java sarebbe qualcosa del genere:
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
dove BaseFont.CP1252 è la codifica. Prova a cercare la codifica esatta di cui hai bisogno per visualizzare i caratteri.
Il tasto per la visualizzazione corretta di set di caratteri alternativi (russo, cinese, giapponese, ecc.) Consente di utilizzare la codifica IDENTITY_H durante la creazione di BaseFont.
Dim bfR As iTextSharp.text.pdf.BaseFont
bfR = iTextSharp.text.pdf.BaseFont.CreateFont("MyFavoriteFont.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED)
IDENTITY_H fornisce supporto Unicode per il carattere scelto, così si dovrebbe essere in grado di visualizzare praticamente qualsiasi carattere. L'ho usato per il russo, il greco e tutte le diverse lettere in lingua europea.
EDIT - 2013-mag-28
Questo funziona anche per v5.0.2 di iTextSharp.
EDIT - 2015-Giugno-23
Dato che segue è un esempio completo di codice (in C#):
private void CreatePdf()
{
string testText = "đĔĐěÇøç";
string tmpFile = @"C:\test.pdf";
string myFont = @"C:\<<valid path to the font you want>>\verdana.ttf";
iTextSharp.text.Rectangle pgeSize = new iTextSharp.text.Rectangle(595, 792);
iTextSharp.text.Document doc = new iTextSharp.text.Document(pgeSize, 10, 10, 10, 10);
iTextSharp.text.pdf.PdfWriter wrtr;
wrtr = iTextSharp.text.pdf.PdfWriter.GetInstance(doc,
new System.IO.FileStream(tmpFile, System.IO.FileMode.Create));
doc.Open();
doc.NewPage();
iTextSharp.text.pdf.BaseFont bfR;
bfR = iTextSharp.text.pdf.BaseFont.CreateFont(myFont,
iTextSharp.text.pdf.BaseFont.IDENTITY_H,
iTextSharp.text.pdf.BaseFont.EMBEDDED);
iTextSharp.text.BaseColor clrBlack =
new iTextSharp.text.BaseColor(0, 0, 0);
iTextSharp.text.Font fntHead =
new iTextSharp.text.Font(bfR, 12, iTextSharp.text.Font.NORMAL, clrBlack);
iTextSharp.text.Paragraph pgr =
new iTextSharp.text.Paragraph(testText, fntHead);
doc.Add(pgr);
doc.Close();
}
Questo è uno screenshot del file PDF che viene creato:
Un punto importante da ricordare è che se il font che hai scelto non supporta i personaggi che stai cercando di inviare al file pdf, nulla che fai in iTextSharp cambierà quello. Verdana mostra bene i personaggi di tutti i caratteri europei che conosco. Altri caratteri potrebbero non essere in grado di visualizzare tutti i caratteri.
Il secondo argomento di BaseFont.CreateFont() è la codifica. E "Identity-H" non è un nome di codice di codifica valido, ne sei sicuro? –
@ManitraAndriamitondra, valido per iTextSharp v4.1.2. Non l'ho usato da un po ', quindi non sono sicuro se questo è ancora valido per qualunque sia la versione corrente. – Stewbob
Devi specificare il percorso completo del file di font. Non è possibile utilizzare i caratteri interni. Se si desidera utilizzare Helvetica 12, ad esempio, è necessario specificare 'BaseFont.CreateFont (" C: \ Windows \ Fonts \ Ariel.ttf ", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED)'. Se si utilizza il carattere interno (ad esempio BaseFont.HELVETICA), si otterrà che "Identity-H" non è un nome di corpo di codifica valido. –
Ci sono due possibili ragioni caratteri non vengono resi:
Questa è un'altra buona ragione per richiedere l'incorporamento di SUBSET.Tacking su alcuni megabyte perché volevi aggiungere un paio di glifi cinesi è un po 'ripido.
Se ti senti paranoico, puoi controllare le tue stringhe contro una determinata istanza di BaseFont (che a mio avviso tiene conto anche della codifica) con myBaseFont.charExists(someChar)
. Se hai un font di cui ti fidi, non mi preoccuperei.
PS: C'è un'altra buona ragione per cui Identity-H richiede un sottoinsieme incorporato. Identity-H legge i byte dal flusso di contenuti come gli indici di glifi. L'ordine dei glifi può variare da un font all'altro, o anche tra versioni dello stesso font. Affidarsi a un sistema di visualizzatori per avere lo stesso font ESATTO è una cattiva idea, quindi è illegale ... in particolare quando Acrobat/Reader inizia a sostituire i font perché non riesce a trovare il font esatto che hai richiesto e non lo hai incorporato. .
E 'causato da font predefinito iTextSharp - Helvetica - che non supporta diverso da caratteri di base (o non supportare tutti gli altri personaggi
In realtà ci sono 2 opzioni:
Questo non funziona per me. Stavo cercando di stampare simboli greci come mu e sigma in un documento inglese (font romano). Credo che i caratteri interni non supportino le lettere greche, indipendentemente dalla codifica. –
Non funziona anche per me. – Jovica