asp.netページにテーブルがあり、それをPDFファイルとしてエクスポートしようとしていますが、生成されたPDFファイルに表示されない国際文字がいくつかあります。
前もって感謝します
asp.netページにテーブルがあり、それをPDFファイルとしてエクスポートしようとしていますが、生成されたPDFファイルに表示されない国際文字がいくつかあります。
前もって感謝します
代替文字セット(ロシア語、中国語、日本語など)を適切に表示するための鍵は、BaseFontを作成するときにIDENTITY_Hエンコーディングを使用することです。
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は、選択したフォントのUnicodeサポートを提供するため、ほとんどすべての文字を表示できるはずです。私はそれをロシア語、ギリシャ語、およびすべての異なるヨーロッパ言語の文字に使用しました。
編集-2013年5月28日
これは、iTextSharpのv5.0.2でも機能します。
編集-2015年6月23日
以下に、完全なコードサンプル(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();
}
これは、作成されたpdfファイルのスクリーンショットです。
覚えておくべき重要な点は、選択したフォントがpdfファイルに送信しようとしている文字をサポートしていない場合、iTextSharpで何も変更しないということです。Verdanaは、私が知っているすべてのヨーロッパフォントの文字をうまく表示します。他のフォントでは、多くの文字を表示できない場合があります。
文字がレンダリングされない理由として、次の 2 つが考えられます。
これは、SUBSETS の埋め込みを要求するもう 1 つの正当な理由です。いくつかの中国語のグリフを追加するために数メガバイトを追加するのは少し急です。
偏執狂的だと感じている場合は、myBaseFont.charExists(someChar)
. 自信のあるフォントがあれば、気にしません。
PS: Identity-H が埋め込みサブセットを必要とする別の正当な理由があります。Identity-H は、コンテンツ ストリームからバイトをグリフ インデックスとして読み取ります。グリフの順序は、フォントごとに、または同じフォントのバージョン間でさえ、大幅に異なる場合があります。まったく同じフォントを使用するためにビューア システムに依存することは悪い考えです。特に、Acrobat/Reader が、要求した正確なフォントを見つけることができず、埋め込まなかったためにフォントの置き換えを開始した場合は、違法です。
使用しているフォントのエンコーディングを設定してみてください。Java では次のようになります。
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
BaseFont.CP1252 はエンコーディングです。文字を表示するために必要な正確なエンコーディングを検索してみてください。
これは、基本文字以外をサポートしていない (または他のすべての文字をサポートしていない) デフォルトの iTextSharp フォント (Helvetica) が原因です。
実際には 2 つのオプションがあります。