3

我在 C# 中的 PDFSharp 中显示中文字符时遇到问题。在创建 PDF 字符串的过程中可以,但是在创建 pdf 文件后它不显示它。我找到了一种解决方案

XFont font_small2 = new XFont("微软雅黑", 9, XFontStyle.Regular, options)

该解决方案适用于我的本地主机,但是当我在 beta 服务器上发布它时,它不显示中文字符。

4

3 回答 3

1

您可以将原始中文字体嵌入到您的pdf文件中并使用正确的CMAP。

var options = new XPdfFontOptions(PdfFontEmbedding.Always);
var font = new XFont("微软雅黑", 9, XFontStyle.Regular, options);

或者

var page = new PdfPage();
var gfx = XGraphics.FromPdfPage(page);
gfx.MFEH = PdfFontEmbedding.Automatic;
于 2013-06-25T04:24:38.663 回答
0

确保字体在 beta 服务器上正确安装,并确保应用程序具有足够的权限。确保字体嵌入在 PDF 文件中。

根据 PDFsharp FAQ,不支持 CJK 字体。但是,如果环境设置正确,您仍然应该在服务器和本地计算机上获得相同的结果。

于 2013-02-07T08:55:01.313 回答
0

这两种解决方案都不适用于较新版本的库,所以我想出了一个解决方法,将字符绘制到位图,然后将位图添加到 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);
            }
        }
于 2019-12-16T15:53:27.697 回答