2011-10-19 4 views
5

Ho cercato una soluzione a questo problema, ma non riesco ancora a trovare la risposta. Qualsiasi aiuto sarebbe apprezzato..NET C# - MigraDoc - Come modificare il set di caratteri del documento?

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> 

< ...>

Nell'esempio sopra caratteri "ąčęėįųųūū" non vengono visualizzati nel PDF esportato.

Come è possibile impostare il set di caratteri "MigraDoc"?

risposta

8

Basta dire al Renderer per creare un documento Unicode:

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

Il primo parametro di PdfDocumentRenderer deve essere vero per ottenere Unicode. Si noti che non tutti i font True Type includono tutti i caratteri Unicode (ma dovrebbe funzionare con Arial, Verdana, ecc.).

vedi qui per un campione completo: http://www.pdfsharp.net/wiki/HelloMigraDoc-sample.ashx

+0

Thanks a lot! :) Ha funzionato come un fascino. –

+0

Quindi WinANSI è il set di caratteri predefinito per MigraDoc? – Sunil

+0

I file PDF hanno codifica PDF (molto simile a ANSI) o Unicode. –

1

Se siete mixing PDFSharp and MigraDoc, come faccio io (che significa che avete un oggetto PDFsharp documento PdfDocument e un oggetto MigraDoc documento doc , che viene visualizzato come parte di documento), tutto non è così semplice. L'esempio, che Team PDFSharp ha dato funziona solo quando si utilizza MigraDoc separatamente.

così si dovrebbe usare in questo modo:

  • Assicurarsi che si sta eseguendo il rendering tuo documento MigraDoc prima di rendere l'oggetto MigraDoc al PDF tagliente XGraphics GFX.
  • Utilizzare l'hack per impostare la codifica per l'oggetto 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); 

Per 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) 
+0

Grazie per il collegamento al campione del caso di uso speciale, ma la domanda di quattro anni riguardava ovviamente il caso d'uso standard. –

+0

Non hai mai notato la distinzione che hai chiaramente indicato. Grazie per l'ottimo suggerimento. – humbleSapiens

Problemi correlati