如何在PdfPCell(iTextSharp)中将图像放在另一个图像的顶部?

时间:2014-01-10 15:31:19

标签: c# .net pdf-generation itextsharp

我有两张图片(iTextSharp.text.Image),我希望将它们直接放在PdfPCell的顶部。其中一张图片具有透明度,应放在最顶层。

我尝试了以下内容:

imgOpaque.Alignment = Image.UNDERLYING;
imgOpaque.SetAbsolutePosition(10f, 10f);
imgTransparent.SetAbsolutePosition(10f, 10f);

var cell = new PdfPCell();
cell.AddElement(imgOpaque);
cell.AddElement(imgTransparent);
table.AddCell(cell);

但是这会导致第二张图像位于第一张图像之后 - 而不是顶部。

如何将两张图片叠加在一起?

iTextSharp版本为5.4.3。

1 个答案:

答案 0 :(得分:0)

为“底部”图片实施IPdfPCellEvent

public class CellBackgroundImage : IPdfPCellEvent {
    private Image _background;
    public void SetImage(string path)  {
        _background = Image.GetInstance(path);
    }
    public void CellLayout(
        PdfPCell cell, Rectangle rectangle, PdfContentByte[] pcb) 
    {
        PdfContentByte cb = pcb[PdfPTable.BACKGROUNDCANVAS];
        cb.AddImage(_background, 
            rectangle.Width, 0, 0, rectangle.Height
           ,rectangle.Left, rectangle.Bottom
        );
    }
}

创建PdfPCell,设置CellEvent属性,然后添加“顶部”图片。

using (Document document = new Document()) {
    PdfWriter.GetInstance(document, stream); // any Stream object
    document.Open();
    PdfPTable table = new PdfPTable(1);
    CellBackgroundImage cbi = new CellBackgroundImage();
    cbi.SetImage(imageBottomPath);
    Image imageTop = Image.GetInstance(imageTopPath);
    PdfPCell imageCell = new PdfPCell();
    imageCell.CellEvent = cbi;
    imageCell.AddElement(imageTop);
    table.AddCell(imageCell);
    document.Add(table);
}