2011-08-14 52 views
0

我正在創建表格並將單元格添加到包含文本或圖像內容的表格中。Itextsharp V 5.x:pdfptable中的圖像單元格高度

var pdfTable = new PdfPTable(2); 
       nCell = new PdfPCell(new Phrase("A")) {HorizontalAlignment = 1}; 
       pdfTable.AddCell(nCell); 
       pdfTable.AddCell("B"); 
       pdfTable.AddCell(qrImg); 
       pdfTable.AddCell(image39); 
       pdfTable.AddCell("C"); 
       pdfTable.AddCell("D"); 
       pdfTable.SpacingBefore = 20f; 
       pdfTable.SpacingAfter = 30f; 
       document.Add(pdfTable); 

使3行顯示的圖像中ROW2

如果我添加細胞通過創建pdfpcell第一對象:

var cell = new PdfPCell(qrImg}; 
pdfTable.AddCell(nCell); 

僅行1和3是可見的。

如果我將高度屬性添加到單元格,然後圖像被顯示。

我的問題(3但相關); 是否需要我們在添加單元格時指定高度(單元格中添加了文本內容 - 正確的短語重讀器)? 當創建新的單元格時,是否存在缺少圖像的問題? 添加圖片內容時,我應該總是使用Addcell(圖片)嗎?

謝謝大家, 月

回答

0

它更容易理解發生了什麼事情,如果你browsesource。 iText中的表格保留一個名爲DefaultCell的屬性,可以反覆重複使用。這樣做是爲了保證基本單元的特性能夠保持不同的單元格。當您撥打AddCell(Image)時,DefaultCell的圖像被設置爲圖像,然後添加到表格中,最後圖像變爲空白。

543  defaultCell.Image = image; 
544  AddCell(defaultCell); 
545  defaultCell.Image = null; 

PdfCell(Image)構造實際上內部調用一個過載PdfPCell(Image, bool)並將false作爲第二個參數,fit。這裏的構造函數的有條件的契合:

152  if (fit) { 
153   this.image = image; 
154   Padding = borderWidth/2; 
155  } 
156  else { 
157   column.AddText(this.phrase = new Phrase(new Chunk(image, 0, 0, true))); 
158   Padding = 0; 
159  } 

如果傳遞false適合,這是默認的,你會看到圖像在一個更復雜的方式加入。

所以基本上你可以用三種主要方式添加一個圖像(好吧,如果你使用嵌套表或塊或短語,實際上更多),下面的第一個選擇默認值,可能是你想要的。第二個更原始,但讓你更接近你想要的東西。第三個是最原始的,假設你知道你在做什麼。

var qrImg = iTextSharp.text.Image.GetInstance(sampleImage1); 

//Use the DefaultCell, including any existing borders and padding 
pdfTable.AddCell(qrImg); 

//Brand new cell, includes some padding to get the image to fit 
pdfTable.AddCell(new PdfPCell(qrImg, true)); 

//Brand new cell, image added as a Chunk within a Phrase 
pdfTable.AddCell(new PdfPCell(qrImg)); 
+0

Hello Chris-感謝您對pdfpcell的詳細解釋。我會通過源代碼查看更多內容。我在ItextSharp上的大部分開發都是試錯。再次感謝你。 – TheMar

+0

@TheMar,當我嘗試你的例子時,我確實非常驚訝,它也沒有達到我的預期。我不得不去源頭看看我是不是瘋了! –

+0

Chris-經歷了一段時間的源代碼,我敢打賭,最好的文檔就是源碼本身。代碼已被很好地評論 – TheMar

相關問題