itextsharp问题笔画应用于单元格文本

时间:2018-10-22 01:53:19

标签: c# pdf itext

因此,我将画布笔触应用于pdf,但是笔触应用于单元格文本。但是只有第一个单元格。

here is image

以下是绘制页面边框的方法:

protected void DrawPageBorder(PdfWriter writer, Document document, PdfContentByte canvas)
    {
        var pageBorderRect = new Rectangle(document.PageSize);
        var content = writer.DirectContent;

        pageBorderRect.Left += document.LeftMargin - BorderDifference;
        pageBorderRect.Right -= document.RightMargin - BorderDifference;
        pageBorderRect.Top -= document.TopMargin - BorderDifference;
        pageBorderRect.Bottom += document.BottomMargin - BorderDifference;
        content.SetLineDash(3f, 3f);
        content.SetRGBColorStroke(236, 236, 236);
        //canvas.SetLineWidth(FillOpacity);
        //canvas.SetRGBColorStroke(0, 0, 0);
        //canvas.SetRGBColorStroke(236, 236, 236);
        //canvas.SetLineDash(3f, 3f);
        content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height);
        content.Stroke();
    }

这是添加带有边框的pdf表的代码:

var docTable = new PdfPTable(1);
docTable.WidthPercentage = 100f;

PdfContentByte canvas = new PdfContentByte(pdfWriter);
DrawPageBorder(pdfWriter, doc, canvas);

这是添加第一个表格单元格的代码:

titleFont.Size = 24.0f;
var text1 = new PdfPCell(new Phrase("To:", titleFont))
{
HorizontalAlignment = Element.ALIGN_LEFT,
Border = Rectangle.NO_BORDER,
PaddingTop = 20f,
PaddingLeft = 9f,
PaddingRight = 9f
};
docTable.AddCell(text1);

有人知道我在哪里错吗?

谢谢

1 个答案:

答案 0 :(得分:0)

每当您将高级api内容创建(如对表的处理)和低级api绘图(如在DrawPageBorder中的处理)混合使用时,请确保您的低级代码不会对图形进行任何更改状态参数。

您的代码保留对LineDash和描边颜色的更改。

您可以通过以安全图形状态/还原图形状态信封将代码图形包装在content上来实现。

您的情况:

    content.SaveState();
    content.SetLineDash(3f, 3f);
    content.SetRGBColorStroke(236, 236, 236);
    //canvas.SetLineWidth(FillOpacity);
    //canvas.SetRGBColorStroke(0, 0, 0);
    //canvas.SetRGBColorStroke(236, 236, 236);
    //canvas.SetLineDash(3f, 3f);
    content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height);
    content.Stroke();
    content.RestoreState();