C#中使用GDI+与PrintDocument实现打印
2011-05-19 22:02
666 查看
近日做报表,需要实现一个比较特殊的打印:针对不同患者的药费记录,打印不同的清单,并且支持一次打印多个患者的记录。其效果看起来应该像下面这个样子:
如上所述,使用弱智的水晶报表,就会遇到如何构造数据源的问题,由于不同患者的药费记录和遗嘱记录都不同,而且整体上需要一个患者一个清单,所以其数据源只能为一个数组,而不是简单的DataTable。小弟一向对大且笨拙的CrystalReport不感冒,再加上对GDI+比较痴迷,索性费点功夫,使用GDI+来打印上述报表。
首先需要构造数据源,创建一个ArrayList对象a,然后再把每个患者需要打印的东东保存为一个ArrayList放入ATotal中。
1if (a != null)
2for (int m = 0; m < 3; m++)
6Size sTotal = new Size(420, e.PageBounds.Height);
2Graphics g = e.Graphics;
3Font fTitle = new Font("宋体", 16); // 标题字体
4int titleHeight = 20; // 标题的高度
5int textHeight = 13; // 普通文本的高度
6Font fText = new Font("宋体", 9); // 文本字体
7
8int top = 30; // 顶部间距
9int left = 10; // 左边距
10int right = 10; // 右边距
11int titleMargin = 15; // 标题和正文行间距
12int textMargin = 5; // 行间距
13int rectangleMargin = 3; // 边框和文本间距
14int oneHeight = 19; // 一行文本 + 2 * 行间距的高度
15int oneWidth = sTotal.Width - left - right; // 打印内容的宽度
16
17int y = 0;
18while (j < a.Count) // Count为要打印的患者个数
19j = 0; // 打印完毕
253e.HasMorePages = false;
判断一行内容是否已经打印过:
1private bool JudgeString( string s )
7
16将已经打印过的内容标记为已打印
17private void AddPrintedSign( ref string s )
22{
23 int l = s.Length;
24 s = s.Replace( s.Substring( l - 1, 1 ), "*" );
25}
如上所述,使用弱智的水晶报表,就会遇到如何构造数据源的问题,由于不同患者的药费记录和遗嘱记录都不同,而且整体上需要一个患者一个清单,所以其数据源只能为一个数组,而不是简单的DataTable。小弟一向对大且笨拙的CrystalReport不感冒,再加上对GDI+比较痴迷,索性费点功夫,使用GDI+来打印上述报表。
首先需要构造数据源,创建一个ArrayList对象a,然后再把每个患者需要打印的东东保存为一个ArrayList放入ATotal中。
1if (a != null)
2for (int m = 0; m < 3; m++)
6Size sTotal = new Size(420, e.PageBounds.Height);
2Graphics g = e.Graphics;
3Font fTitle = new Font("宋体", 16); // 标题字体
4int titleHeight = 20; // 标题的高度
5int textHeight = 13; // 普通文本的高度
6Font fText = new Font("宋体", 9); // 文本字体
7
8int top = 30; // 顶部间距
9int left = 10; // 左边距
10int right = 10; // 右边距
11int titleMargin = 15; // 标题和正文行间距
12int textMargin = 5; // 行间距
13int rectangleMargin = 3; // 边框和文本间距
14int oneHeight = 19; // 一行文本 + 2 * 行间距的高度
15int oneWidth = sTotal.Width - left - right; // 打印内容的宽度
16
17int y = 0;
18while (j < a.Count) // Count为要打印的患者个数
19j = 0; // 打印完毕
253e.HasMorePages = false;
判断一行内容是否已经打印过:
1private bool JudgeString( string s )
7
16将已经打印过的内容标记为已打印
17private void AddPrintedSign( ref string s )
22{
23 int l = s.Length;
24 s = s.Replace( s.Substring( l - 1, 1 ), "*" );
25}
相关文章推荐
- C#中使用GDI+与PrintDocument实现打印
- C#中使用[GDI+]+PrintDocument实现打印
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用) (转)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)实用的类
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在 C# 中实现打印功能(C# 中 PrintDialog,PrintDocument 的使用)
- C#使用PrintDocument打印 多页 打印预览
- C#中PrintDocument打印功能的实现。分页打印内容控制与排版
- 使用PrintDocument如何实现指定页码范围打印
- C#使用PrintDocument打印 多页 打印预览