2012-04-02 116 views
0

我想用iTextSharp在PDF中顯示「✔」字符。但是,該字符不會顯示在創建的PDF上。請幫助我。如何使用iTextSharp在PDF中顯示✔?

+2

你能告訴我們您正在使用該字符添加到使用iTextSharp的PDF文檔中的代碼? – user7116 2012-04-02 18:41:34

+2

您是否使用帶有✔字符的字體? – 2012-04-02 18:42:04

回答

10
Phrase phrase = new Phrase("A check mark: "); 
Font zapfdingbats = new Font(Font.FontFamily.ZAPFDINGBATS); 
phrase.Add(new Chunk("\u0033", zapfdingbats)); 
phrase.Add(" and more text"); 
document.Add(phrase); 
+0

根據PDF規格PDF renderers必須支持14種常用字體,而Zapf Dingbats就是其中之一。這個解決方案可能是最好的,因爲它不需要任何額外的字體嵌入。實際嵌入字體的唯一原因是,如果你不喜歡這種呈現方式。 – 2012-04-03 15:24:47

1

字體Wingdings打印此字符而不是「o」。 您需要將此字體連接到您的應用程序,然後將此字體應用於字母並將字體嵌入pdf以實現兼容性。

這是我在前段時間在其中一個項目中使用的函數(未清理)。 請清理它,但它有一些你需要的基本功能。 (我將自定義字體(font1.ttf和font2.ttf)複製到項目目錄中)

我希望它能幫助你。

public void StartConvert(String originalFile, String newFile) 
    { 
     Document myDocument = new Document(PageSize.LETTER); 
     PdfWriter.GetInstance(myDocument, new FileStream(newFile, FileMode.Create)); 
     myDocument.Open(); 

     int totalfonts = FontFactory.RegisterDirectory("C:\\WINDOWS\\Fonts"); 
     iTextSharp.text.Font content = FontFactory.GetFont("Pea Heather's Handwriting", 13);//13 
     iTextSharp.text.Font header = FontFactory.GetFont("assign", 16); //16 

     BaseFont customfont = BaseFont.CreateFont(@"font1.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
     Font font = new Font(customfont, 13); 
     string s = " "; 
     myDocument.Add(new Paragraph(s, font)); 

     BaseFont customfont2 = BaseFont.CreateFont(@"font2.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 
     Font font2 = new Font(customfont2, 16); 
     string s2 = " "; 
     myDocument.Add(new Paragraph(s2, font2)); 

     try 
     { 
      try 
      {     
       using (StreamReader sr = new StreamReader(originalFile)) 
       { 
        // Read and display lines from the file until the end of 
        // the file is reached. 
        String line; 
        while ((line = sr.ReadLine()) != null) 
        { 
         String newTempLine = ""; 
         String[] textArray; 
         textArray = line.Split(' '); 
         newTempLine = returnSpaces(RandomNumber(0, 6)) + newTempLine; 

         int counterMax = RandomNumber(8, 12); 
         int counter = 0; 
         foreach (String S in textArray) 
         { 
          if (counter == counterMax) 
          { 
           Paragraph P = new Paragraph(newTempLine + Environment.NewLine, font); 
           P.Alignment = Element.ALIGN_LEFT; 
           myDocument.Add(P); 
           newTempLine = ""; 
           newTempLine = returnSpaces(RandomNumber(0, 6)) + newTempLine; 
          } 
          newTempLine = newTempLine + returnSpaces(RandomNumber(1, 5)) + S; 
          counter++; 
         } 
         Paragraph T = new Paragraph(newTempLine, font2); 
         T.Alignment = Element.ALIGN_LEFT; 

         myDocument.Add(T); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("The file could not be read:"); 
       Console.WriteLine(e.Message); 
      } 
     } 
     catch (DocumentException de) 
     { 
      Console.Error.WriteLine(de.Message); 
     } 
     catch (IOException ioe) 
     { 
      Console.Error.WriteLine(ioe.Message); 
     } 

     try 
     { 
      myDocument.Close(); 
     } 
     catch { } 
    } 
+6

我從來沒有在單一方法中看到如此多的GC.Collect()調用。 – lurkerbelow 2012-04-02 19:19:15

相關問題