我正在尝试在iTextSharp中的表格单元格中平铺图像或背景图像。我最接近的是使用PdfPTable和PdfPCell将图像直接附加到单元格。
tempCell = new PdfPCell();
tempCell.Image = iTextSharp.text.Image.GetInstance(Path.Combine(GetImageDirectory(), "my_image.gif"));
table.AddCell(tempCell);
但这有其问题。我的表格中的单元格大小不一样,因此图像会按宽度自动缩放。这可以使一些细胞相对于其他细胞更高,或者如果它们很窄则只有一半的图像。
如果使用iTextSharp甚至可以获得图像平铺的任何建议?谢谢!
答案 0 :(得分: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
将在cellLayout覆盖中获得您需要的一切。您可能希望使用canvases[PdfPTable.BASECANVAS]
代替上面的someContent
。
你需要隐藏和重用你的patternPainter,这样你就不会为你使用它的每个单元格获得重复。这可能会导致一些非常可怕的文件膨胀。没有beuno。
答案 1 :(得分:0)
尝试重复使用以下内容
Image imgLogo = Image.GetInstance(_pathToCustomLogo);
if (imgLogo != null)
{
imgLogo.ScaleToFit(desiredLogoWidth, imgLogo.Height);
Cell cellWithImage = new Cell();
cellWithImage.Add(imgLogo);
maintableHeader.AddCell(cellWithImage);
}
if (imgLogo != null)
{
imgLogo.ScaleToFit(desiredLogoWidth, imgLogo.Height);
Cell cellWithImage = new Cell();
cellWithImage.Add(imgLogo);
maintableHeader.AddCell(cellWithImage);
}
侨