Arn*_*rny 12 c# asp.net itextsharp export-to-pdf
我在asp.net页面有一个表,并试图将其导出为PDF文件,我有几个国际字符未生成PDF文件,任何建议,
提前致谢
Ste*_*bob 17
正确显示备用字符集(俄语,中文,日语等)的关键是在创建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)
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
这是创建的pdf文件的屏幕截图:

需要记住的一点是,如果您选择的字体不支持您尝试发送到pdf文件的字符,那么您在iTextSharp中所做的任何事情都不会改变它.Verdana很好地显示了我所知道的所有欧洲字体中的字符.其他字体可能无法显示多个字符.
字符未呈现的原因有两个:
这是要求嵌入SUBSETS的另一个好理由.由于你想添加几个中国字形,所以需要几兆字节,这有点陡峭.
如果你感觉偏执,你可以检查你的字符串与给定的BaseFont实例(我相信也考虑编码)myBaseFont.charExists(someChar).如果你有自信的字体,我不会打扰.
PS:Identity-H需要嵌入式子集的另一个好理由.Identity-H从内容流中读取字节作为字形索引.字形的顺序可以从一种字体到下一种字体,甚至在相同字体的版本之间变化很大.依靠观众系统来获得完全相同的字体是一个坏主意,所以它是非法的...特别是当Acrobat/Reader开始替换字体时,因为它找不到你要求的确切字体而你没有嵌入它.
您可以尝试设置您正在使用的字体的编码。在Java中会是这样的:
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
Run Code Online (Sandbox Code Playgroud)
其中 BaseFont.CP1252 是编码。尝试搜索要显示的字符所需的确切编码。
| 归档时间: |
|
| 查看次数: |
22105 次 |
| 最近记录: |