Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元格背景颜色会影响其他行的颜色_C#_Itextsharp_Pdfptable - Fatal编程技术网

C# 单元格背景颜色会影响其他行的颜色

C# 单元格背景颜色会影响其他行的颜色,c#,itextsharp,pdfptable,C#,Itextsharp,Pdfptable,我正在创建一个PDF,在其中,我向每个页面添加一些文本,以及使用以下方法绘制的两条线: private void DrawLines(Document pdfDoc, PdfContentByte cb) { cb.MoveTo(0, 562); cb.LineTo(pdfDoc.PageSize.Width, 562); cb.MoveTo(0, 561); cb.LineTo(pdfDoc.PageSize.Width, 561); } 在一个特定的页面上,

我正在创建一个PDF,在其中,我向每个页面添加一些文本,以及使用以下方法绘制的两条线:

private void DrawLines(Document pdfDoc, PdfContentByte cb) {
    cb.MoveTo(0, 562);
    cb.LineTo(pdfDoc.PageSize.Width, 562);
    cb.MoveTo(0, 561);
    cb.LineTo(pdfDoc.PageSize.Width, 561);
}
在一个特定的页面上,有一个表,其中我使用以下代码更改一个特定单元格的背景色:

header = new PdfPCell(new Phrase(market_data_list[i], grid_data_heading));
header.Colspan = 2;
header.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
header.BackgroundColor =new BaseColor(238,233,233);
market_table.AddCell(header); //adds cell to the table

现在,我得到了我指定的背景颜色(灰色)的单元格,但线条从黑色变为灰色。。。我想用黑色画那些线

您的代码有两个问题:

问题#1:方法
DrawLines()
不会“绘制任何线条”

它为两条线创建路径,但这些线不是用该方法绘制的。您需要添加以下行:

cb.Stroke();
如果没有该线,绘制线将被推迟,直到调用笔划操作符。这可能永远不会发生,在这种情况下,线永远不会画出来。在您的情况下,绘制其他内容时会发生这种情况。到那时,笔划颜色可能已经改变,在这种情况下,用于绘制在
DrawLines()
方法中构建的路径的颜色是不可预测的

问题2:您没有使用最佳实践

代码中用于绘制线条和形状的颜色是不可预测的,因为您不小心使用图形状态堆栈。最佳做法是在更改颜色、线宽等时保存和恢复图形状态

我会像这样更改您的
DrawLines()
方法:

private void DrawLines(Document pdfDoc, PdfContentByte cb) {
    cb.SaveState();
    cb.SetColorStroke(GrayColor.GRAYBLACK);
    cb.MoveTo(0, 562);
    cb.LineTo(pdfDoc.PageSize.Width, 562);
    cb.MoveTo(0, 561);
    cb.LineTo(pdfDoc.PageSize.Width, 561);
    cb.Stroke();
    cb.RestoreState();
}

现在保存图形状态(
SaveState()
),然后再将颜色更改为黑色(
SetRGBColorStroke()
)。构造线的路径(使用
LineTo()
MoveTo()
方法)并绘制这些线(
Stroke()
)。为了确保所应用的颜色更改不会影响可能要添加的其他内容,您可以将图形状态堆栈恢复到其以前的状态(
RestoreState()
)。

它起作用了,而且最初还使用灰色和黑色绘制线条。thnks 4纠正了我用图形保存州的观念。在你的抽绳代码中,我将“canvas”改为相同的“cb”,它的工作很好。。。但是我能知道你用过“画布”吗?哎呀,
canvas
是一个复制/粘贴错误。我已经更正了我的答案。抢手货我没有注意到我的错误。