2015-04-27 78 views
2

我使用iTextSharp以HTML頁面爲例創建PDF。我正在嘗試在文字周圍添加邊框以突出顯示某些項目。使用這些帖子中的方法(Draw Rect at curr positionAdd Text over image)我已經使用OnGenericTag事件爲每個匹配特定條件的塊創建矩形。事件正確觸發,矩形繪製在正確的元素上。但是,當我爲表格單元添加背景時出現問題,它出現在塊矩形的頂部。有沒有辦法使從表格單元格背景上繪製的OnGenericTag事件繪製矩形?iTextSharp - 無法在表格背景色上繪製矩形


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被創建並經由分配loop:

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時的結果。高亮R·的比賽,但是,當我申請一個背景顏色到PdfPCell其上繪製矩形從Chunk heat map from pdf

回答

1

使用層writer.DirectContentUnder確保矩形停留在頂端繪製表格(writer.DirectContent)。

+0

如何將表添加到DirectContentUnder圖層? – Auzi

+0

使用'PdfPTable.WriteSelectedRows()'。 –