2012-01-31 147 views
0

我創建了一個包含圖像的PDF文檔,我試圖在每個圖像下添加文本請記住,該頁面的模板是不同的,這取決於用戶在頁面上想要的圖像數量。我的問題是我在添加和定位文本時遇到問題。在圖像後添加文本到pdf

代碼添加圖片:添加文字

int count = 0; 

     imageStartX = (docSize.Width/100) * marginSizeProcent; 

     float imageMaxHeight = 0; 
     float imageMaxWidth = 0; 

     iTextSharp.text.Image image = null; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 

       imageMaxWidth = docSize.Width - ((docSize.Width/100) * (2 * (float)marginSizeProcent)); 
       imageMaxHeight = imageStartY - ((docSize.Width/100) * (float)marginSizeProcent); 


       foreach (PDFObject o in pdfObjects) 
       { 
        if (count > 0) 
         AddPageWithHeader(false); 

        image = iTextSharp.text.Image.GetInstance(o.File); 
        image.ScaleToFit(imageMaxWidth, imageMaxHeight); 
        image.SetAbsolutePosition(imageStartX + (imageMaxWidth - image.ScaledWidth)/2, imageStartY - image.ScaledHeight - (imageMaxHeight - image.ScaledHeight)/2); 

        image.Border = Rectangle.BOX; 
        image.BorderWidth = 2f; 
        image.BorderColor = BaseColor.DARK_GRAY; 

        document.Add(image); 

        count++; 
       } 

       break; 

      case PageLayoutEnum.TwoImages: 

代碼:

MemoryStream memoryStream = new MemoryStream(); 

     PdfReader pdfReader = new PdfReader(documentStream.ToArray()); 
     PdfStamper stamper = new PdfStamper(pdfReader, memoryStream); 

     PdfContentByte contentbyte = stamper.GetUnderContent(1); 
     ColumnText dispalyIdText = new ColumnText(contentbyte); 
     Paragraph idText; 

     int counter = 0; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 
       foreach (PDFObject item in pdfObjects) 
       { 
        dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 
        idText = new Paragraph(new Chunk(item.DisplayId, FontFactory.GetFont("Arial", 20, Font.BOLD, BaseColor.RED))); 
        dispalyIdText.AddElement(idText); 
       } 
       break; 

      case PageLayoutEnum.TwoImages: 

回答

1

你不說你的實際問題是什麼,只是你遇到他們。

如果我猜測,你的問題之一是文本沒有真正顯示在你的PDF文件中。這有三個不同的原因。第一條是這條線:

dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 

該方法的前四個參數是要約束繪圖的矩形的座標。第一個參數是左下角x,第二個是左下角y,第三個是右上角x,第四個是右上角y。在你的代碼中,你說的是將文本綁定到一個左下角座標爲200,200,右上角座標爲200,200的矩形。這意味着你的矩形具有零寬度和高度。爲了解決這個問題,你需要給出一個實際工作的矩形。在PDF中,左下角是0,0所以在左下角那是20個像素繪製文本的矩形(沒有實際像素卻是另一個故事)高,200寬,你會怎麼做:

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 200, Element.ALIGN_LEFT); 

你的第二個問題是你將leading(行高)設置爲200.根據你創建的對象,這可能會或可能不會使文本出口。你應該把它設置得更加健全,可能是字體的高度。這不會影響AddElement,但它確實會影響SetText

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 12, Element.ALIGN_LEFT); 

的最後一個問題是,使用ColumnText當你現在在「文本」模式,必須告訴系統,當你準備好開始處理。您可以通過發出Go()命令做到這一點:

dispalyIdText.Go(); 
+0

感謝克里斯,我發現使用PDFContentByte顯示和文本位置的另一個解決方案。通常你對問題的解決方案非常合適,所以我也猜測你對這個問題的權利!如果我必須重新訪問我的代碼的這一部分,那麼我會嘗試你的建議。 – DaNet 2012-02-01 15:31:18