C# 未使用iTextSharp显示中文字符
我一直在使用itextsharp从数据库数据生成pdf。我的数据库数据包含文本、x和y坐标以及页码。我是这样做的C# 未使用iTextSharp显示中文字符,c#,fonts,itextsharp,C#,Fonts,Itextsharp,我一直在使用itextsharp从数据库数据生成pdf。我的数据库数据包含文本、x和y坐标以及页码。我是这样做的 string oldFile = Server.MapPath(string.Format("~/App_Data/Documents/Templates/{0}", documentModel.Filename)); // open the reader PdfReader reader = new PdfReader(oldFile);
string oldFile = Server.MapPath(string.Format("~/App_Data/Documents/Templates/{0}", documentModel.Filename));
// open the reader
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
iTextSharp.text.Document document = new iTextSharp.text.Document(size);
PdfWriter writer = PdfWriter.GetInstance(document, _memoryStream);
writer.CloseStream = false;
document.Open();
PdfContentByte cb;
PdfImportedPage page;
BaseFont bf;
foreach (var pageNumber in pages)
{
document.NewPage();
cb = writer.DirectContent;
// create the new page and add it to the pdf
page = writer.GetImportedPage(reader, pageNumber);
cb.AddTemplate(page, 0, 0);
bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 9);
var items = documentModel.FieldContents.Where(a => a.Page == pageNumber).ToList();
foreach (var item in items)
{
cb.BeginText();
cb.ShowTextAligned(item.Alignment, item.Text ?? string.Empty, item.X, item.Y, item.Rotation);
cb.EndText();
}
}
////////////////////////////////////////////////////////////////////
document.Close();
writer.Close();
reader.Close();
byte[] byteInfo = _memoryStream.ToArray();
_memoryStream.Write(byteInfo, 0, byteInfo.Length);
_memoryStream.Position = 0;
RedirectToAction("Index");
return new FileStreamResult(_memoryStream, "application/pdf");
我用这个已经有一段时间了。但我也想支持汉字。我试着输入汉字,但它没有被显示。我把它改回了英文字符,效果很好。有什么想法吗?谢谢 代码中存在不同的错误 正如mkl已经解释的那样,您使用的Type1Helvetica字体没有嵌入,也不知道任何有关中文字形的信息。你需要使用一种会画汉字的字体。此外,你不应该期望它了解任何关于汉语的知识 您还创建了非法代码(并导致无效的PDF语法): 这是一个没有定义字体和大小的文本对象。您正在图形状态(不属于)而不是文本状态(需要)下使用“setFontAndSize()”方法。这段代码运行的事实告诉我您使用的是旧的iTextSharp版本 解决问题的方法是找到有关添加的示例。然后创建一个“短语”,并使用。通过使用
ColumnText
,您可以避免现在使用低级方法时遇到的问题:您使用的是beginText()
和endText()
,而没有阅读PDF规范ColumnText
将在幕后完成所有这些困难的工作
如果Java示例让您感到困惑,请访问相应示例的C#端口链接。代码中存在不同的错误 正如mkl已经解释的那样,您使用的Type1Helvetica字体没有嵌入,也不知道任何有关中文字形的信息。你需要使用一种会画汉字的字体。此外,你不应该期望它了解任何关于汉语的知识 您还创建了非法代码(并导致无效的PDF语法): 这是一个没有定义字体和大小的文本对象。您正在图形状态(不属于)而不是文本状态(需要)下使用“setFontAndSize()”方法。这段代码运行的事实告诉我您使用的是旧的iTextSharp版本 解决问题的方法是找到有关添加的示例。然后创建一个“短语”,并使用。通过使用
ColumnText
,您可以避免现在使用低级方法时遇到的问题:您使用的是beginText()
和endText()
,而没有阅读PDF规范ColumnText
将在幕后完成所有这些困难的工作
如果Java示例让您感到困惑,请访问相应示例的C#端口链接。代码中存在不同的错误 正如mkl已经解释的那样,您使用的Type1Helvetica字体没有嵌入,也不知道任何有关中文字形的信息。你需要使用一种会画汉字的字体。此外,你不应该期望它了解任何关于汉语的知识 您还创建了非法代码(并导致无效的PDF语法): 这是一个没有定义字体和大小的文本对象。您正在图形状态(不属于)而不是文本状态(需要)下使用“setFontAndSize()”方法。这段代码运行的事实告诉我您使用的是旧的iTextSharp版本 解决问题的方法是找到有关添加的示例。然后创建一个“短语”,并使用。通过使用
ColumnText
,您可以避免现在使用低级方法时遇到的问题:您使用的是beginText()
和endText()
,而没有阅读PDF规范ColumnText
将在幕后完成所有这些困难的工作
如果Java示例让您感到困惑,请访问相应示例的C#端口链接。代码中存在不同的错误 正如mkl已经解释的那样,您使用的Type1Helvetica字体没有嵌入,也不知道任何有关中文字形的信息。你需要使用一种会画汉字的字体。此外,你不应该期望它了解任何关于汉语的知识 您还创建了非法代码(并导致无效的PDF语法): 这是一个没有定义字体和大小的文本对象。您正在图形状态(不属于)而不是文本状态(需要)下使用“setFontAndSize()”方法。这段代码运行的事实告诉我您使用的是旧的iTextSharp版本 解决问题的方法是找到有关添加的示例。然后创建一个“短语”,并使用。通过使用
ColumnText
,您可以避免现在使用低级方法时遇到的问题:您使用的是beginText()
和endText()
,而没有阅读PDF规范ColumnText
将在幕后完成所有这些困难的工作
如果Java示例让您感到困惑,请访问相应示例的C#端口链接。您可以像这样加载本地中文字体
BaseFont baseFont = BaseFont.CreateFont(
"C:\\Windows\\Fonts\\simhei.ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font font = new Font(baseFont);
然后使用“字体”进一步发送文本您可以参考以下常用的中文本地字体
{"yahei", "C:\\WINDOWS\\FONTS\\msyh.ttf"},
{"fangsong", "C:\\WINDOWS\\FONTS\\simfang.ttf"},
{"heiti" ,"C:\\Windows\\Fonts\\simhei.ttf"},
{"kaiti" ,"C:\\Windows\\Fonts\\simkai.ttf"},
{"lishu" ,"C:\\Windows\\Fonts\\SIMLI.TTF"},
{"youyuan" ,"C:\\Windows\\Fonts\\SIMYOU.TTF"},
{"songti" ,"C:\\Windows\\Fonts\\simsun.ttc,0"},
{"xinsongti" ,"C:\\Windows\\Fonts\\simsun.ttc,1"}
希望它能帮助你 您可以像这样加载本地中文字体
BaseFont baseFont = BaseFont.CreateFont(
"C:\\Windows\\Fonts\\simhei.ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font font = new Font(baseFont);
然后使用“字体”进一步发送文本您可以参考以下常用的中文本地字体
{"yahei", "C:\\WINDOWS\\FONTS\\msyh.ttf"},
{"fangsong", "C:\\WINDOWS\\FONTS\\simfang.ttf"},
{"heiti" ,"C:\\Windows\\Fonts\\simhei.ttf"},
{"kaiti" ,"C:\\Windows\\Fonts\\simkai.ttf"},
{"lishu" ,"C:\\Windows\\Fonts\\SIMLI.TTF"},
{"youyuan" ,"C:\\Windows\\Fonts\\SIMYOU.TTF"},
{"songti" ,"C:\\Windows\\Fonts\\simsun.ttc,0"},
{"xinsongti" ,"C:\\Windows\\Fonts\\simsun.ttc,1"}
希望它能帮助你 您可以像这样加载本地中文字体
BaseFont baseFont = BaseFont.CreateFont(
"C:\\Windows\\Fonts\\simhei.ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font font = new Font(baseFont);
然后使用“字体”进一步发送文本您可以参考以下常用的中文本地字体
{"yahei", "C:\\WINDOWS\\FONTS\\msyh.ttf"},
{"fangsong", "C:\\WINDOWS\\FONTS\\simfang.ttf"},
{"heiti" ,"C:\\Windows\\Fonts\\simhei.ttf"},
{"kaiti" ,"C:\\Windows\\Fonts\\simkai.ttf"},
{"lishu" ,"C:\\Windows\\Fonts\\SIMLI.TTF"},
{"youyuan" ,"C:\\Windows\\Fonts\\SIMYOU.TTF"},
{"songti" ,"C:\\Windows\\Fonts\\simsun.ttc,0"},
{"xinsongti" ,"C:\\Windows\\Fonts\\simsun.ttc,1"}
希望能有帮助