7

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

    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>

<...>

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

如何设置“MigraDoc”字符集?

4

2 回答 2

11

只需告诉渲染器创建一个 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

于 2011-10-20T09:34:42.807 回答
3

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

所以你应该这样使用它:

  • 确保在将 MigraDoc 对象渲染到 PDF 清晰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)
于 2016-02-28T14:20:28.580 回答