2009-07-22 98 views
5

我正在尝试在iTextSharp中的表格单元格中平铺图像或背景图像。我得到的最接近的是使用PdfPTable和PdfPCell将图像直接附加到单元格。iTextSharp:表格中的平铺图像

tempCell = new PdfPCell(); 
tempCell.Image = iTextSharp.text.Image.GetInstance(Path.Combine(GetImageDirectory(), "my_image.gif")); 
table.AddCell(tempCell); 

虽然这有它的问题。单元格在我的表格中的大小从来不会相同,因此图像会按宽度自动缩放。这可以使一些细胞相对于其他细胞高得多,或者如果它们很窄,则只是图像的一半。

有关如何获得图像平铺的任何建议,如果它甚至可以使用iTextSharp?谢谢!

回答

2

如果一切都失败了,你可以创建一个图案填充,并设置在电池事件(或填充整个桌子后面)。

您会将图像绘制到PdfPatternPainter模板中,并为重复模式设置所需的边界。然后,您可以将您的图像以您想要的任何比例绘制到此模板中。

PdfPatternPainter patternPainter = someContent.createPattern(width, height); 
patternPainter.addImage(image, desiredImgSizeX, 0, 0, desiredImgSizeY, 0, 0); 

someContent.saveState(); 
someContent.setPatternFill(patternPainter); 

someContent.rectangle(llx, lly, wid, hei); 
someContent.fill(); 

someContent.restoreState(); 

您的PdfPCellEvent将给您celllaayout覆盖所需的一切。您可能需要使用canvases[PdfPTable.BASECANVAS]代替上述的someContent

你会想要存储和重用你的patternPainter,所以你没有得到你使用它的每个单元格的重复。这可能会导致一些非常可怕的文件膨胀。没有beuno。

+0

感谢您的回答。这个项目在一年前结束,但如果我们遇到与PDF相同的问题,我一定会再次查看这个问题! – jocull 2010-12-21 02:10:59

0

尝试重用以下 Image imgLogo = Image.GetInstance(_pathToCustomLogo);

  if (imgLogo != null) 
      { 
       imgLogo.ScaleToFit(desiredLogoWidth, imgLogo.Height); 
       Cell cellWithImage = new Cell(); 
       cellWithImage.Add(imgLogo); 
       maintableHeader.AddCell(cellWithImage); 
      } 

+0

这会拉伸图像还是平铺它? – jocull 2010-11-30 18:20:04