2013-08-25 120 views
6

Tôi đang cố gắng chèn một số ký tự unicode (arabic) sang PDF với C# Tôi đã sử dụng thư viện iTextSharp nhưng khi tôi chèn ký tự và lưu các ký tự trong tệp PDF các ký tự unicode không được hiển thị cho đến khi tôi nhấp đúp chuột vào vị trí của các chracters sẽ được xuất hiện.điền vào mẫu pdf với các ký tự unicode

string pdfTemplate = @"c:\po.pdf"; 
string newFile = @"g:\test\completed_fw4.pdf"; 
PdfReader pdfReader = new PdfReader(pdfTemplate); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create)); 
AcroFields pdfFormFields = pdfStamper.AcroFields; 
pdfFormFields.SetField("position", TextBox1.Text); 
pdfStamper.FormFlattening = false; 
// close the pdf 
pdfStamper.Close(); 

Trả lời

11

Có một vài cách mà bạn có thể sửa lỗi này nhưng cuối cùng bạn cần phải xác định một phông chữ có khả năng render nội dung Unicode của bạn.

Đầu tiên, tạo một đối tượng BaseFont trỏ đến font chữ Unicode của bạn, tôi đang sử dụng Arial Unicode dưới đây:

var arialFontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF"); 
var arialBaseFont = BaseFont.CreateFont(arialFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

Sau đó, bạn có thể thiết lập thuộc tính phông chữ trên từng lĩnh vực riêng lẻ:

pdfFormFields.SetFieldProperty("position", "textfont", arialBaseFont, null); 

Hoặc bạn có thể thêm phông chữ thay thế toàn tài liệu:

pdfFormFields.AddSubstitutionFont(arialBaseFont); 
+0

điều này làm cho tệp pdf lớn nó nhảy từ 2MB đến 17MB. – danarj

+1

Arial Unicode MS hỗ trợ 50.000+ glyphs, đó là lý do tại sao nó quá lớn. Các tiêu chuẩn PDF (và không chỉ iText) không gửi với glyphs cho các ngôn ngữ không phải tiếng Anh, do đó bạn cần phải cung cấp một phông chữ mà không. Bạn có thể chọn bất kỳ phông chữ nào bạn muốn, tôi chỉ sử dụng Arial Unicode MS làm ví dụ. –

+0

là có bất kỳ cách nào xung quanh. – danarj