我使用iTextSharp以HTML页面为例创建PDF。我试图在文本周围添加边框以突出显示某些项目。使用这些帖子中的方法(Draw Rect at curr position和Add 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页面。它显示表格单元格背景颜色以及需要在它们周围加上矩形以突出显示它们的值。
这是渲染PDF时的结果。然而,当我将背景颜色应用于PdfPCell
时,突出显示的R#匹配,它会从Chunk
的矩形上绘制
答案 0 :(得分:1)
使用图层writer.DirectContentUnder
绘制表格,以确保矩形位于顶部(writer.DirectContent
)。