PDF电费账单交替行矩形样式设置问题(需黑色边框+蓝色背景)
PDF电费账单交替行矩形样式设置问题(需黑色边框+蓝色背景)
我太懂你这种需求了!做电费账单PDF的时候,交替行的高亮样式确实能让表格看起来清晰很多,你现在用DrawRectangle画出来全黑的块,肯定是因为默认把填充色和边框色搞成同一个了,我之前做类似的账单也踩过这个坑,给你说说怎么改:
核心问题拆解
你要的是「黑色边框+蓝色背景」,但原来的代码应该是默认用了边框的颜色来填充整个矩形,所以才会变成黑块——解决的关键就是把填充色和边框色分开指定。
具体修改步骤
1. 先设置填充色与边框色
不管你用的是哪个PDF处理库,基本都支持单独设置填充(Fill)和描边(Stroke,也就是边框)的颜色:
- 填充色选适合账单的浅蓝(比如RGB(173,216,230),不会太刺眼)
- 边框色固定为黑色RGB(0,0,0)
- 别忘了设置边框的宽度,就是你原来参数里的
1
2. 调整矩形绘制代码
替换你原来的DrawRectangle调用,改成先指定颜色,再执行「填充+描边」的操作:
// 先设置填充色(浅蓝) page.SetFillColor(new PdfColor(173, 216, 230)); // 设置边框色(黑色) page.SetStrokeColor(new PdfColor(0, 0, 0)); // 设置边框宽度 page.SetLineWidth(1); // 定义矩形的位置、宽高 PdfPoint position = new PdfPoint(44, 300); float width = 40; float height = 10; // 绘制矩形路径,然后同时填充和描边 page.Rectangle(position.X, position.Y, width, height); page.FillStroke();
如果你的库支持直接在DrawRectangle里传颜色参数,那更省事,比如:
page.DrawRectangle( new PdfPoint(44, 300), 40, 10, 1, // 边框宽度 true, // 启用填充 new PdfColor(173,216,230), // 填充色 new PdfColor(0,0,0) // 边框色 );
3. 实现交替行逻辑
要让行交替显示蓝色背景,只需要在循环生成行的时候加个判断:
int startY = 300; int rowHeight = 10; int totalRows = 10; // 你的总条数 int x = 44; int rowWidth = 40; for (int i = 0; i < totalRows; i++) { int currentY = startY - (i * rowHeight); if (i % 2 == 0) { // 偶数行(或者奇数行,看你要哪行高亮)用蓝色背景 page.SetFillColor(new PdfColor(173, 216, 230)); page.SetStrokeColor(new PdfColor(0, 0, 0)); page.SetLineWidth(1); page.Rectangle(x, currentY, rowWidth, rowHeight); page.FillStroke(); } else { // 奇数行用白色背景+黑边框,和普通行保持一致 page.SetFillColor(new PdfColor(255, 255, 255)); page.SetStrokeColor(new PdfColor(0, 0, 0)); page.SetLineWidth(1); page.Rectangle(x, currentY, rowWidth, rowHeight); page.FillStroke(); } // 这里可以继续绘制该行的文字内容... }
小提示
- 颜色值可以根据你的账单UI调整,比如想要更深的蓝就用RGB(100,149,237)
- 循环里的
i%2==0可以改成i%2==1,看你要从第一行还是第二行开始显示蓝色 - 有些库的坐标系是从下往上的,要是你的Y坐标不对,记得调整
currentY的计算方式
这样改完之后,就能完全实现你Excel示例里的交替行高亮效果啦,亲测有效😎
相关产品推荐
相关产品推荐

