2011-10-19 5 views
5

Tôi đã tìm kiếm giải pháp cho vấn đề này, nhưng vẫn không thể tìm thấy câu trả lời. Bất kỳ trợ giúp sẽ được đánh giá cao..NET C# - MigraDoc - Cách thay đổi bộ ký tự tài liệu?

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> 

< ...>

Trong ví dụ nhân vật trên "ąčęėįųųūū" không được hiển thị trong pdf xuất khẩu.

Làm cách nào để đặt bộ ký tự 'MigraDoc'?

Trả lời

8

Chỉ cần nói cho các Renderer để tạo ra một tài liệu Unicode:

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

Tham số đầu tiên của PdfDocumentRenderer phải đúng để có được Unicode. Xin lưu ý rằng không phải tất cả phông chữ True Type đều bao gồm tất cả các ký tự Unicode (nhưng nó sẽ hoạt động với Arial, Verdana, v.v.).

Xem ở đây cho một mẫu hoàn chỉnh: http://www.pdfsharp.net/wiki/HelloMigraDoc-sample.ashx

+0

Cảm ơn rất nhiều! :) Làm việc như người ở. –

+0

Vậy WinansI là bộ mã mặc định cho MigraDoc? – Sunil

+0

Tệp PDF có mã hóa PDF (giống như ANSI) hoặc mã hóa Unicode. –

1

Nếu bạn là mixing PDFSharp and MigraDoc, như tôi đã làm (nó có nghĩa là bạn có một đối tượng PDFSharp tài liệu PdfDocument và một đối tượng MigraDoc Document doc , được hiển thị dưới dạng một phần của tài liệu), mọi thứ không đơn giản như vậy. Ví dụ, nhóm PDFSharp đó đã chỉ hoạt động khi bạn đang sử dụng MigraDoc riêng biệt.

Vì vậy, bạn nên sử dụng nó theo cách này:

  • Hãy chắc chắn rằng bạn đang render MigraDoc doc của bạn sớm hơn render các đối tượng MigraDoc đến PDF sắc nét XGraphics gfx.
  • Sử dụng tính năng hack để đặt mã hóa cho đối tượng 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); 

Đối 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

Cảm ơn bạn đã liên kết với mẫu trường hợp sử dụng đặc biệt, nhưng câu hỏi bốn năm rõ ràng là về trường hợp sử dụng chuẩn. –

+0

Không bao giờ nhận thấy sự khác biệt mà bạn đã chỉ ra rõ ràng. Cảm ơn vì một gợi ý tuyệt vời. – humbleSapiens