我在C#中的PDFSharp中显示中文字符有问题。在创建PDF字符串的过程中没关系,但在创建pdf文件后它不会显示它。我找到了一个解决方案
XFont font_small2 = new XFont("微软雅黑", 9, XFontStyle.Regular, options)
此解决方案适用于我的本地主机,但是当我在测试版服务器上发布时,它不会显示中文字符。
答案 0 :(得分:1)
您可以将原始中文字体嵌入到您的pdf文件中并使用正确的CMAP。
var options = new XPdfFontOptions(PdfFontEmbedding.Always);
var font = new XFont("微软雅黑", 9, XFontStyle.Regular, options);
OR
var page = new PdfPage();
var gfx = XGraphics.FromPdfPage(page);
gfx.MFEH = PdfFontEmbedding.Automatic;
答案 1 :(得分:0)
确保在测试版服务器上正确安装了字体,并确保应用程序具有足够的权限。确保字体嵌入PDF文件中。
根据PDFsharp FAQ,不支持CJK字体。但是,如果环境设置正确,您仍应在服务器和本地计算机上获得相同的结果。
答案 2 :(得分:-1)
这两种解决方案都不适用于较新版本的lib,因此我想出了一种解决方法,将字符绘制到位图,然后将位图添加到PDF:
Font font = GetFont(fieldInfo, fontSize * 0.97f); // Chosen empirically
using (var imageStream = new MemoryStream())
{
// Draw string as an image
using (var bitmap = new Bitmap((int) fieldRect.Width, (int) (fieldRect.Height * 1.5f)))
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
graphics.DrawString(fieldValue, font, Brushes.Black, PointF.Empty);
bitmap.Save(imageStream, ImageFormat.Png);
}
// Draw image on PDF
using (XImage xImage = XImage.FromStream(imageStream))
{
double labelPositionX = fieldRect.X1 + 2;
double labelPositionY = fieldRect.Y2 - 2;
xGraphics.DrawImage(xImage, labelPositionX, page.Height - labelPositionY);
}
}