2013-08-25 5 views
6

Próbuję wstawić kilka znaków Unicode (arabski) do formularza PDF z C# Użyłem biblioteki iTextSharp, ale kiedy wstawię znaki i zapisuję znaki w pliku PDF, znaki Unicode nie będą wyświetlane aż do kliknij dwukrotnie pozycję znaków, które powinny się pojawić.wypełnij formularz pdf ze znakami 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(); 

Odpowiedz

11

Istnieje kilka sposobów na rozwiązanie tego problemu, ale ostatecznie musisz określić czcionkę, która jest w stanie renderować zawartość Unicode.

Najpierw utwórz BaseFont obiekt wskazujący na czcionki Unicode, używam Arial Unicode poniżej:

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

Następnie można albo ustawić właściwość font na każdym polu indywidualnie:

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

Możesz też dodać czcionkę zastępującą cały dokument:

pdfFormFields.AddSubstitutionFont(arialBaseFont); 
+0

powoduje to, że plik pdf duże skacze od 2MB do 17MB. – danarj

+1

Arial Unicode MS obsługuje ponad 50 000 glifów, dlatego jest tak duży. Standard PDF (a nie tylko iText) nie jest dostarczany z glifami dla języków innych niż angielski, więc musisz podać czcionkę, która to robi. Możesz wybrać dowolną czcionkę, po prostu użyłem Arial Unicode MS jako przykładu. –

+0

jest jakiś sposób. – danarj