我正在尝试在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.MUH = PdfFontEncoding.Unicode;
设置gfx
。
供初学者阅读的注释:如果使用PdfDocumentRenderer
,生活会更简单:
https://stackoverflow.com/a/48192026/162529
您可以仅使用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