使用 MigraDoc DocumentRenderer 在 PDF 中显示 Unicode 字符

Display Unicode characters in PDF using MigraDoc DocumentRenderer

我正在尝试在我的 PDF 生成器中使用 Unicode 字符。我首先使用 PDFsharp 为页面创建主要布局(例如每个页面上的水印和形状),然后尝试使用 MigraDoc 添加文本。虽然在 PDFsharp 中一切都与字体相得益彰并且代码运行良好,但 MigraDoc 会创建空字符。简单代码如下所示:

//with PDFsharp
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();

XGraphics gfx = XGraphics.FromPdfPage(page);
string s = "ĄŻŹĆĘŁÓążźęćłó";
XFont font16 = new XFont("Calibri", 16, XFontStyle.Regular);
gfx.DrawString(s, font16, XBrushes.Black, 70, 50, XStringFormats.Default);

//with MigraDoc
Document doc = new Document();
Section sec = doc.AddSection();
Paragraph para = sec.AddParagraph();
para.Format.Font.Name = "Calibri";
para.Format.Font.Size = 16;
para.AddText(s);

MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(doc);
docRenderer.PrepareDocument();
docRenderer.RenderPage(gfx, 1);
//

document.Save("test.pdf");
Process.Start("test.pdf");

我尝试了不同的字体,但没有任何效果。

在调用任何 MigraDoc 代码之前尝试为 gfx 设置 gfx.MUH = PdfFontEncoding.Unicode;

初学者阅读这里的注意事项:如果使用PdfDocumentRenderer,生活会更简单:

您可以仅使用 MigraDoc 功能将图像或 PDF 页面用作页面背景,而无需混合使用 MigraDoc 和 PDFsharp。

DocumentRenderer 允许混合使用 PDFsharp 和 MigraDoc - 以实现超出 MigraDoc 单独功能的功能。在这种情况下,您必须使用上面显示的 MigraDoc Unicode Hack MUH 来启用 Unicode 支持。 MUH也用在了PDFsharp网站的官方混音样本中:
http://www.pdfsharp.net/wiki/MixMigraDocAndPdfSharp-sample.ashx 在 PDFsharp 论坛上发布的这个示例中也使用了它:
http://forum.pdfsharp.net/viewtopic.php?f=8&t=3172