c# - 单元格背景颜色影响其他线条的颜色

标签 c# itext pdfptable

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

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

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

关于c# - 单元格背景颜色影响其他线条的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26605887/

相关文章:

java - iText - setSplitRows 问题

java - 如何使用 Java 中的 PDFPTable 将 2 个表格从上到下添加到单个表格中

c# - 为什么 Add-Migration 有时会创建重复的迁移?

c# - 使用 C# 将 xsd 转换为 xml

pdf - 创建 PDF/A-3 : Embedded file shall contain valid Params key

java - 如何正确合并文档?

c# - Curly Brace 出现在不应该出现的地方

c# - 自动化 SQL 引用和换行

c# - 如何在 ASP.NET 和 C# 中使用 iTextSharp 合并 PDF 中具有相同值的行?

java - 如何更改单元格的宽度?