iTextSharp:在表格单元格中平铺图片

6

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

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

然而,这种方式存在问题。在我的表格中,单元格的大小不相同,因此图像会根据宽度自动缩放。这可能会导致某些单元格与其他单元格相比显得特别高或者如果它们很窄,则只填充了图像的一半。

如果可能的话,有什么建议可以让图像平铺吗? 谢谢!

2个回答

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();

cellLayout重写中,您的PdfPCellEvent将会提供所需的所有内容。 您可能想要使用canvases[PdfPTable.BASECANVAS]代替上面的someContent

您需要储存和重复使用patternPainter,以避免在每个单元格中重复使用。这可能会导致一些非常可怕的文件膨胀。不好的。


谢谢你的答复。这个项目已经结束了将近一年,但如果我们再次遇到PDF的同样问题,我一定会再次查找这个信息! - jocull

0
尝试重复使用以下代码:Image imgLogo = Image.GetInstance(_pathToCustomLogo);
            if (imgLogo != null)
            {
                imgLogo.ScaleToFit(desiredLogoWidth, imgLogo.Height);
                Cell cellWithImage = new Cell();
                cellWithImage.Add(imgLogo);
                maintableHeader.AddCell(cellWithImage);
            }

你好


这会拉伸图像还是平铺它? - jocull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接