如何为itextsharp pdf页面的边框添加背景颜色

时间:2015-05-03 18:19:45

标签: c# asp.net .net pdf-generation itextsharp

如何在itextsharp pdf页面的边框[四边]的外侧添加背景颜色[非边框线颜色] ..

我踩到了这个..但它不适用于边界外侧的背景颜色..

   content.EoFill();
   content.EoFillStroke();
   content.Fill();
   content.FillStroke();

但没有工作

public class pageborder : PdfPageEventHelper
{
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        base.OnEndPage(writer, document);
        var content = writer.DirectContent;
        content.SetColorStroke(BaseColor.BLACK);
        content.RoundRectangle(35f,55f, 520f, 750f ,20f);
        content.Stroke();        
    }    
}

2 个答案:

答案 0 :(得分:1)

  

如何在itextsharp pdf页面的边框[四边]的外侧添加背景颜色[非边框线颜色]

我认为这意味着你想要这样的东西:

screenshot of page with colored frame

您可以通过覆盖onEndPage来创建它(这是Java代码,但相应的C#代码应该很容易从中派生出来):

public void onEndPage(PdfWriter writer, Document document)
{
    super.onEndPage(writer, document);
    PdfContentByte content = writer.getDirectContent();
    content.setColorFill(BaseColor.BLACK);
    content.rectangle(writer.getPageSize().getLeft(), writer.getPageSize().getBottom(),
                      writer.getPageSize().getWidth(), writer.getPageSize().getHeight());
    content.roundRectangle(35f,55f, 520f, 750f ,20f);
    content.eoFill();        
}    

(完整示例:CreateWithFrame.java方法testCreateFramedDocumentEoFill

这可以通过在路径中添加另一个页面大小的矩形并使用偶数奇数填充来实现。由于内部区域作为原始圆角矩形和新矩形的一部分添加到路径中,即两次,不会由eoFill填充。矩形边框之间的区域仅添加一次。因此, eoFill填充。

如果您相应地安排子路径方向,也可以使用普通的fill方法,例如。

public void onEndPage(PdfWriter writer, Document document)
{
    super.onEndPage(writer, document);
    PdfContentByte content = writer.getDirectContent();
    content.setColorFill(BaseColor.BLACK);
    content.rectangle(writer.getPageSize().getRight(), writer.getPageSize().getBottom(),
                     -writer.getPageSize().getWidth(), writer.getPageSize().getHeight());
    content.roundRectangle(35f,55f, 520f, 750f ,20f);
    content.fill();
}    

(完整示例:CreateWithFrame.java方法testCreateFramedDocumentFill

此处页面大小的矩形添加了负方向,而圆角矩形添加了正方向。因此,对于圆角矩形的内部区域,子路径会被取消,并且fill调用不会填充。

答案 1 :(得分:0)

您有复制/粘贴代码来绘制页面边框:

public class pageborder : PdfPageEventHelper
{
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        base.OnEndPage(writer, document);
        var content = writer.DirectContent;
        content.SetColorStroke(BaseColor.BLACK);
        content.RoundRectangle(35f,55f, 520f, 750f ,20f);
        content.Stroke();        
    }    
}

不幸的是,你不了解你所复制的内容。您确实需要将Stroke()替换为Fill(),但这会使用默认填充颜色填充矩形,并且您没有定义任何填充颜色。

您还需要将SetColorStroke()替换为SetColorFill()。例如:

public class pageborder : PdfPageEventHelper
{
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        var content = writer.DirectContent;
        content.SetColorFill(BaseColor.RED);
        content.RoundRectangle(35f,55f, 520f, 750f ,20f);
        content.Fill();        
    }    
}

现在,您将使用带红色的圆角填充矩形。