2014-02-28 19 views
0

我利用iText 2.1.6,我需要在一個表精確定位的圖像,例如:如何在PdfPTable上精確定位圖像?

Precise positioning

注意,圖像覆蓋一組特定的行和列,而其中有些部分 - 它覆蓋5到13行,其中,部分覆蓋5行和13行,完全覆蓋8-12行。同樣,它部分覆蓋C列和D列。

換句話說,我想說圖像的左上角應該在C5的單元格C5中,並且在C5的左上方右側是4pt和6pt。

我該怎麼做?我想我會將文本添加到表格中,將表格添加到文檔中,然後查詢表格以獲取行和列的絕對位置,然後將圖像添加到該位置的文檔中,也許直接內容模式。

但是表格可能會跨頁分割,因爲它可能有數百行。在這種情況下,我需要將圖像添加到正確的頁面和正確的位置。

有沒有推薦的方法來做到這一點?謝謝。

+0

這很容易實現一個表或單元格事件。不幸的是,您使用的是不支持的iText版本。請升級! –

+0

再次感謝。我會看看那些。我已經啓動了升級過程,但這需要時間。同時,我必須使用我擁有的版本。謝謝你的幫助。 –

回答

0

我寫了一些使用表事件的示例代碼。在AddOverlappingImage類中,我們創建一個表並聲明一個表事件。此表事件看起來像這樣:

public class ImageContent implements PdfPTableEvent { 
    protected Image content; 
    public ImageContent(Image content) { 
     this.content = content; 
    } 
    public void tableLayout(PdfPTable table, float[][] widths, 
      float[] heights, int headerRows, int rowStart, 
      PdfContentByte[] canvases) { 
     try { 
      PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS]; 
      float x = widths[3][1] + 10; 
      float y = heights[3] - 10 - content.getScaledHeight(); 
      content.setAbsolutePosition(x, y); 
      canvas.addImage(content); 
     } catch (DocumentException e) { 
      throw new ExceptionConverter(e); 
     } 
    } 
} 

我傳遞一個Image到事件類,並在tableLayout()方法中,我的圖像添加到第四行和第二列(索引從0開始計數)。

我對單元格位置進行了硬編碼。顯然,您應該使用一些參數,例如圖像和座標的List