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

how to add background color for border of itextsharp pdf page

如何在 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();        
    }    
}

您有 copy/pasted 绘制页面边框的代码:

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();        
    }    
}

现在用红色填充圆角矩形。

How can I add back ground color [not border line color] at out side of border[four sides] of itextsharp pdf page

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

您可以像这样通过覆盖 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 调用不会填充。