.NET C # - MigraDoc - Как изменить кодировку документа? - PullRequest
5 голосов
/ 19 октября 2011

Я искал решение этой проблемы, но все еще не могу найти ответ.Мы будем благодарны за любую помощь.

    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'?

Ответы [ 2 ]

9 голосов
/ 20 октября 2011

Просто скажите Renderer для создания документа Unicode:

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

Первый параметр PdfDocumentRenderer должен быть истинным, чтобы получить Unicode.Обратите внимание, что не все шрифты True Type включают в себя все символы Юникода (но они должны работать с Arial, Verdana и т.

2 голосов
/ 28 февраля 2016

Если вы смешиваете PDFSharp и MigraDoc , как я (это означает, что у вас есть объект PdfSharp PdfDocument document и объект MigraDoc Документ doc , который отображается как часть document ), все не так просто.Пример, который предоставила команда PDFSharp, работает только тогда, когда вы используете MigraDoc отдельно.

Так что вы должны использовать его следующим образом:

  • Убедитесь, что вы визуализируете документ MigraDoc раньше, чемрендеринг объекта MigraDoc в PDF резкое XGraphics gfx .
  • Используйте хак для установки кодировки для объекта 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)
...