.NET C# – MigraDoc – 如何更改文档字符集?

我已经搜索了这个问题的解决方案,但仍然无法找到答案。 任何帮助,将不胜感激。

Document document = new Document(); Section section = document.AddSection(); Paragraph paragraph = section.AddParagraph(); paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50); paragraph.AddText("ąčęėįųųūū"); paragraph.Format.Font.Size = 9; paragraph.Format.Alignment = ParagraphAlignment.Center;  

在上面的例子中,字符“ąčęėįųųūū”不会在导出的pdf中显示。

如何设置’MigraDoc’字符集?

只需告诉Renderer创建一个Unicode文档:

 PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always); renderer.Document = document; 

PdfDocumentRenderer的第一个参数必须为true才能获得Unicode。 请注意,并非所有True Type字体都包含所有Unicode字符(但它应该与Arial,Verdana等一起使用)。

请参阅此处获取完整示例: http : //www.pdfsharp.net/wiki/HelloMigraDoc-sample.ashx

如果你像我一样混合PDFSharp和MigraDoc (这意味着你有一个PdfSharp对象PdfDocument文档和一个MigraDoc对象文档doc ,它作为文档的一部分呈现),一切都不那么简单。 PDFSharp团队提供的示例仅在您单独使用MigraDoc时才有效。

所以你应该这样使用它:

  • 确保您提前渲染MigraDoc文档,而不是将MigraDoc对象渲染为PDF sharp XGraphics gfx
  • 使用hack为gfx对象设置编码。

 XGraphics gfx = XGraphics.FromPdfPage(page); // HACK² gfx.MUH = PdfFontEncoding.Unicode; gfx.MFEH = PdfFontEmbedding.Always; // HACK² Document doc = new Document(); PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true, PdfFontEmbedding.Always); pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); MigraDoc.Rendering.DocumentRenderer docRenderer = new DocumentRenderer(doc); docRenderer.PrepareDocument(); docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para); 

对于1.5.x-betax

  let gfx = XGraphics.FromPdfPage(page) gfx.MUH <- PdfFontEncoding.Unicode let doc = new Document() let pdfRenderer = new PdfDocumentRenderer(true, PdfFontEmbedding.Always) pdfRenderer.Document <- doc pdfRenderer.RenderDocument() let docRenderer = new DocumentRenderer(doc) docRenderer.PrepareDocument() docRenderer.RenderObject(gfx, XUnit.FromCentimeter 5, XUnit.FromCentimeter 10, "12cm", para)