iTextSharp - 无法在tablecell背景颜色上绘制矩形

时间:2015-04-27 21:10:13

标签: c# pdf itextsharp

我使用iTextSharp以HTML页面为例创建PDF。我试图在文本周围添加边框以突出显示某些项目。使用这些帖子中的方法(Draw Rect at curr positionAdd Text over image)我使用OnGenericTag事件为每个符合特定条件的Chunk创建矩形。事件正确触发,矩形绘制在正确的元素上。但是,当我添加tablecell的背景时,会出现问题,它出现在Chunk矩形的顶部。有没有办法从表格单元格背景上方绘制的OnGenericTag事件中绘制矩形?

OnGenericTags方法:

public class GenericTags : PdfPageEventHelper
    {
        public override void OnGenericTag(PdfWriter writer, Document pdfDocument, iTextSharp.text.Rectangle rect, String text)
        {
            if ("ellipse".Equals(text)) //I know it's not needed. 
                ellipse(writer.DirectContent, rect);
        }

        public void ellipse(PdfContentByte content, iTextSharp.text.Rectangle rect)
        {
            content.SaveState();
            content.SetRGBColorStroke(0x00, 0x00, 0xFF);
            content.SetLineWidth(2);
            content.Rectangle(rect.Left - 2f, rect.Bottom - 3f, rect.Width, rect.Height + 3f);
            content.Stroke();
            content.RestoreState();
        }
    }

每个PdfPCell定义为:

PdfPCell med = new PdfPCell(ph[4])
   {
     HorizontalAlignment = Element.ALIGN_CENTER,
     VerticalAlignment = Element.ALIGN_CENTER,
     BackgroundColor = hm_yellow //this draws above rect from onGenericTag()
   };

创建Chunks并通过foreach循环分配:

ph[j] = new Phrase();
foreach (var x in p.Risks)
   {
      c[i] = new Chunk("R" + x.APP_RISK_ID.ToString() + ", ");
      if (x.RISK_STATUS_CD == "57")
      {
        //c[i].SetBackground(hm_top_tier); // still shows behind table cell background
        c[i].SetGenericTag("ellipse");
      }
    ph[j].Add(c[i]);
   }

这是我试图变成PDF的HTML页面。它显示表格单元格背景颜色以及需要在它们周围加上矩形以突出显示它们的值。 Heat map from HTML

这是渲染PDF时的结果。然而,当我将背景颜色应用于PdfPCell时,突出显示的R#匹配,它会从Chunk的矩形上绘制 heat map from pdf

1 个答案:

答案 0 :(得分:1)

使用图层writer.DirectContentUnder绘制表格,以确保矩形位于顶部(writer.DirectContent)。