2009-11-09 71 views
2

我利用iText生成的數據庫中的數據PDF報告時拍攝到PdfPTable背景...你可以設置一個利用iText

PDF文件的網頁的標題是一些文字上的圖像圖像動態添加的,說的生成例如日期..

任何人都知道,如果我們可以設置背景圖片在iText的類型PdfPTable的表..

感謝

回答

4

我知道它很遲,但可能會幫助有人。這是做到這一點的方法。

創建一個類BGClass,實現PdfPCellEvent並進入下面的方法。

@Override 
    public void cellLayout(PdfPCell arg0, Rectangle arg1, PdfContentByte[] arg2) { 
     try { 
      PdfContentByte pdfContentByte = arg2[PdfPTable.BACKGROUNDCANVAS]; 
      Image bgImage = Image.getInstance("URL_TO_YOUR_IMAGE"); 
      pdfContentByte.addImage(bgImage, arg1.getWidth(), 0, 0, arg1 
        .getHeight(), arg1.getLeft(), arg1.getBottom()); 

     } catch (BadElementException e) { 
      e.printStackTrace(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (DocumentException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

在主類,在其中創建PDF,pdfpCell.setCellEvent(新BGClass());其中pdfpCell是您想要背景圖像的單元格。

+0

幫了很多.......真棒回答........... Thankyou。 – Hariprasath 2014-06-26 10:10:11

0

Prabhat的技術有一兩個缺陷。

  1. 將圖像的副本添加到每個單元的PDF中。在cellLayout調用之間存儲返回的圖像,以便您只有一個副本。如果你有一個10x10的表格和一個10kb的圖片,你在PDF中佔用1mb而不是10kb。哎喲。它實際上比所有那些額外對象的額外開銷(不是很糟糕,但可測量)要差一點。
  2. 它必須平鋪圖像,每個單元格一個。

你最好用PdfPTableEvent。請注意,如果您的表跨越多個頁面,您的事件處理程序將爲每個表調用一次。 heightswidths參數有點時髦。每個中的第一個值是絕對的開始位置。其餘的值實際上是高度和寬度。方便,但變量名稱是有點誤導。

請記住,圖像的每個實例意味着PDF中該圖像的另一個副本。儘可能地保存並重復使用它們。

相關問題