PDFSharp с китайскими иероглифами

У меня проблема с отображением китайских иероглифов в PDFSharp на С#. В процессе создания строки PDF все в порядке, но после создания файла PDF он не отображается. Я нашел одно решение, которое

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

Это решение работает на моем локальном хосте, но когда я выпускаю его на бета-сервере, оно не отображает китайские иероглифы.


person bastek.d    schedule 07.02.2013    source источник


Ответы (3)


Вы можете вставить оригинальный китайский шрифт в свой 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;
person Malhotra    schedule 25.06.2013

Убедитесь, что шрифт правильно установлен на бета-сервере, и убедитесь, что приложение имеет достаточные права. Убедитесь, что шрифт встроен в файл PDF.

Согласно часто задаваемым вопросам PDFsharp, шрифты CJK не поддерживаются. Но все же вы должны получить одинаковые результаты на сервере и локальном компьютере, если среды настроены правильно.

person I liked the old Stack Overflow    schedule 07.02.2013

Ни одно из решений не работало для более новой версии библиотеки, поэтому я придумал обходной путь для рисования символов в растровое изображение, а затем добавления растрового изображения в 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);
            }
        }
person Vitaliy Ulantikov    schedule 16.12.2019