2010-11-25 61 views
4

我使用iTextSharp來加載現有的PDF並使用PdfStamper添加文本。我想完全控制文本,這意味着我希望能夠控制字體(僅TrueType),字體大小和座標。現在,我正在使用ShowTextAligned將文本添加到某些座標,setFontAndSize設置字體和字體大小。這是我的代碼添加文字:使用iTextSharp和PDFStamper在PDF中使用不同的字體

private void AddText(BaseFont font, string text, int x, int y, int size) 
    { 
     pdf.BeginText(); 
     pdf.SetFontAndSize(font, size); 
     pdf.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0); 
     pdf.EndText(); 
    } 

下面的函數是用來加載TrueType字體:

public BaseFont GetFont(string font, string encoding) 
    { 
     if (!(font.EndsWith(".ttf") || font.EndsWith(".TTF"))) 
      font += ".ttf"; 

     BaseFont basefont; 

     basefont = BaseFont.CreateFont(ConfigurationManager.AppSettings["fontdir"] + font, encoding, BaseFont.NOT_EMBEDDED); 

     if (basefont == null) 
      throw new Exception("Could not load font '" + font + "' with encoding '" + encoding + "'"); 

     return basefont; 
    } 

下面的代碼是用來加載現有的PDF:

 Stream outputPdfStream = Response.OutputStream; 
     PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(HttpContext.Current.Request.MapPath("PdfTemplates/" + ConfigurationManager.AppSettings["pdf_template"])), null); 
     PdfStamper pdfStamper = new PdfStamper(pdfReader, outputPdfStream); 

     pdf = pdfStamper.GetOverContent(1); 

除非我嘗試使用不同的字體,否則這一切都可以很好地工作。所以當用不同的字體多次調用AddText時,當openend時,PDF將顯示一個通用錯誤。我想知道是否可以使用ShowTextAligned函數使用不同的字體,如果它是,如何?

回答

1

感謝您的回答馬克,但我已經解決了這個問題。我的Content-Type標頭出現問題,告訴瀏覽器PDF有多大。這導致瀏覽器在實際下載完整PDF之前停止下載。添加新字體時,PDF大小將超過Content-Type標題中指定的大小,從而導致不良的PDF。現在已經解決了,多種字體都可以正常工作:-)。

1

不是真的,沒有。它一次只能處理一種字體。出於好奇,你在做什麼來獲得糟糕的pdf輸出?我想看看你的代碼。

改爲查看ColumnText。有不少例子在「iText in Action 2nd edition」中有詳細介紹,並且有很好的介紹。書中的所有樣本都可以在線獲得。