我正在创建一个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()).