iTextSharp:表格单元格中的平铺图像

时间:2009-07-22 18:51:07

标签: c# .net image pdf itextsharp

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

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

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

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

2 个答案:

答案 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); }