. net c# - MigraDoc -如何更改文档字符集

本文关键字:文档 字符集 何更改 MigraDoc net | 更新日期: 2023-09-27 18:11:37

我一直在寻找这个问题的解决方法,但仍然找不到答案。如有任何帮助,不胜感激。

    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; 
    </b>

& lt;…>

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

如何设置"MigraDoc"字符集

. net c# - 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对象document doc,它被呈现为document的一部分),一切都不是那么简单。PDFSharp团队给出的示例仅在单独使用MigraDoc时有效。

所以你应该这样使用:

  • 确保在渲染MigraDoc对象到PDF sharp XGraphics gfx之前渲染MigraDoc文档。
  • 使用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)