在开发一个项目时,需要做一个打印数据曲线的功能,结果发现有些数据曲线打印不出来。
此后,进行了测试,发现DrawLines方法中的PointF的数组长度不能超过8125个,否则就不画线,而在其它对象上则不存在这个问题。
在网络上查询的解释也不是很详细。不同的打印机该限制的值也可能不同。
没有办法,目前只能自定义一个画线方法,来回避这个限制了。
public static void DrawLinesEx(this System.Drawing.Graphics g, Pen pen, IList<PointF> points)
{
List<PointF> ps = new List<PointF>();
ps.AddRange(points);
while (ps.Count > 8000) //系统限制在8126以下
{
g.DrawLines(pen, ps.Take(8000).ToArray());
ps.RemoveRange(0, 8000);
}
if (ps.Count > 1)
g.DrawLines(pen, ps.ToArray());
}
public static void DrawLinesEx(this System.Drawing.Graphics g, Pen pen, IList<Point> points)
{
List<Point> ps = new List<Point>();
ps.AddRange(points);
while (ps.Count > 8000)
{
g.DrawLines(pen, ps.Take(8000).ToArray());
ps.RemoveRange(0, 8000);
}
if (ps.Count > 1)
g.DrawLines(pen, ps.ToArray());
}
另外,没有考虑采用一个位图的做缓存的原因是这样打印处理的曲线线条粗细和清晰度效果都差一点。
希望哪位高手能有更好的方法。