近日做报表,需要实现一个比较特殊的打印:针对不同患者的药费记录,打印不同的清单,并且支持一次打印多个患者的记录。其效果看起来应该像下面这个样子:

      如上所述,使用弱智的水晶报表,就会遇到如何构造数据源的问题,由于不同患者的药费记录和遗嘱记录都不同,而且整体上需要一个患者一个清单,所以其数据源只能为一个数组,而不是简单的DataTable。小弟一向对大且笨拙的CrystalReport不感冒,再加上对GDI+比较痴迷,索性费点功夫,使用GDI+来打印上述报表。

     首先需要构造数据源,创建一个ArrayList对象a,然后再把每个患者需要打印的东东保存为一个ArrayList放入ATotal中。

 


 1C#中使用GDI+与PrintDocument实现打印_数据源if (a != null)

 2C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03C#中使用GDI+与PrintDocument实现打印_5g_04{

 3C#中使用GDI+与PrintDocument实现打印_字符串_05    a.Clear();

 4C#中使用GDI+与PrintDocument实现打印_字符串_06}

 5C#中使用GDI+与PrintDocument实现打印_数据源for (int m = 0; m < 3; m++)

 6C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03C#中使用GDI+与PrintDocument实现打印_5g_04{

 7C#中使用GDI+与PrintDocument实现打印_字符串_05    ArrayList a1 = new ArrayList();

 8C#中使用GDI+与PrintDocument实现打印_字符串_05    string x0 = "住院患者一日清单";

 9C#中使用GDI+与PrintDocument实现打印_字符串_05    string x1 = "入院日期:2007-11-11    结算日期:2007-11-11至 2007-11-15 ";

10C#中使用GDI+与PrintDocument实现打印_字符串_05    string x2 = "姓名:欧阳峰 住院号:20090909090   床:512 妇科";

11C#中使用GDI+与PrintDocument实现打印_字符串_05    string x3 = "项目编号*项目名称*单价*数量*单位"; // 注意其中的*标志

12C#中使用GDI+与PrintDocument实现打印_字符串_05    string[] x4 = newstring[90]; // 假设有90条数据,不固定

13C#中使用GDI+与PrintDocument实现打印_字符串_05    for (int i = 0; i < 90; i++)

14C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

15C#中使用GDI+与PrintDocument实现打印_字符串_05        x4[i] = "juejue1984*www.loyosoft.com*11.00*11*鸟"; // 注意其中的*标志

16C#中使用GDI+与PrintDocument实现打印_字符串_22    }

17C#中使用GDI+与PrintDocument实现打印_字符串_05    string x5 = "费用累计:2500*小计:400 ";

18C#中使用GDI+与PrintDocument实现打印_字符串_05    string x6 = "累计按金:3600*余额:1600 ";

19C#中使用GDI+与PrintDocument实现打印_字符串_05    string x7 = "";

20C#中使用GDI+与PrintDocument实现打印_字符串_05    string x8 = "";

21C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x0);

22C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x1);

23C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x2);

24C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x3);

25C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x4);

26C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x5);

27C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x6);

28C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x7);

29C#中使用GDI+与PrintDocument实现打印_字符串_05    a1.Add(x8);

30C#中使用GDI+与PrintDocument实现打印_字符串_05    a.Add(a1);

31C#中使用GDI+与PrintDocument实现打印_字符串_06}


然后在PrintDocument对象的PrinPage事件作如下处理:

 


  1C#中使用GDI+与PrintDocument实现打印_数据源Size sTotal = new Size(420, e.PageBounds.Height);

  2C#中使用GDI+与PrintDocument实现打印_数据源Graphics g = e.Graphics;

  3C#中使用GDI+与PrintDocument实现打印_数据源Font fTitle = new Font("宋体", 16); // 标题字体

  4C#中使用GDI+与PrintDocument实现打印_数据源int titleHeight = 20; // 标题的高度

  5C#中使用GDI+与PrintDocument实现打印_数据源int textHeight = 13; // 普通文本的高度

  6C#中使用GDI+与PrintDocument实现打印_数据源Font fText = new Font("宋体", 9); // 文本字体

  7C#中使用GDI+与PrintDocument实现打印_数据源

  8C#中使用GDI+与PrintDocument实现打印_数据源int top = 30; // 顶部间距

  9C#中使用GDI+与PrintDocument实现打印_数据源int left = 10; // 左边距

 10C#中使用GDI+与PrintDocument实现打印_数据源int right = 10; // 右边距

 11C#中使用GDI+与PrintDocument实现打印_数据源int titleMargin = 15; // 标题和正文行间距

 12C#中使用GDI+与PrintDocument实现打印_数据源int textMargin = 5; // 行间距

 13C#中使用GDI+与PrintDocument实现打印_数据源int rectangleMargin = 3; // 边框和文本间距

 14C#中使用GDI+与PrintDocument实现打印_数据源int oneHeight = 19; // 一行文本 + 2 * 行间距的高度

 15C#中使用GDI+与PrintDocument实现打印_数据源int oneWidth = sTotal.Width - left - right; // 打印内容的宽度

 16C#中使用GDI+与PrintDocument实现打印_数据源

 17C#中使用GDI+与PrintDocument实现打印_数据源int y = 0;

 18C#中使用GDI+与PrintDocument实现打印_数据源while (j < a.Count) // Count为要打印的患者个数

 19C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03C#中使用GDI+与PrintDocument实现打印_5g_04{

 20C#中使用GDI+与PrintDocument实现打印_字符串_05    ArrayList a3 = a[j] as ArrayList; // a3位要打印的患者的清单内容。

 21C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - titleHeight) // 如果已经到了底部则开始下一页

 22C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 23C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

 24C#中使用GDI+与PrintDocument实现打印_字符串_05return;

 25C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 26C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 27C#中使用GDI+与PrintDocument实现打印_字符串_05    string x = a3[0] as string;

 28C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(x)) // 如果此行记录还未打印过

 29C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 30C#中使用GDI+与PrintDocument实现打印_字符串_05

 31C#中使用GDI+与PrintDocument实现打印_字符串_05//string x = "住院患者一日清单"; // a1

 32C#中使用GDI+与PrintDocument实现打印_字符串_05SizeF sTitle = g.MeasureString(x, fTitle); // 计算标题的长度和高度

 33C#中使用GDI+与PrintDocument实现打印_字符串_05Point pTitle = new Point((sTotal.Width - (int)sTitle.Width) / 2, y + top); // 使标题绝对居中

 34C#中使用GDI+与PrintDocument实现打印_字符串_05y += top; // 1

 35C#中使用GDI+与PrintDocument实现打印_字符串_05//

 36C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(x, fTitle, Brushes.Black, pTitle.X, y); // 标题

 37C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref x);

 38C#中使用GDI+与PrintDocument实现打印_字符串_05a3[0] = x; // 标记该患者的此行内容为已经打印过

 39C#中使用GDI+与PrintDocument实现打印_字符串_05y += titleHeight + titleMargin; // Y坐标下移

 40C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 41C#中使用GDI+与PrintDocument实现打印_字符串_05

 42C#中使用GDI+与PrintDocument实现打印_字符串_05

 43C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 44C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

 45C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 46C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

 47C#中使用GDI+与PrintDocument实现打印_字符串_05return;

 48C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 49C#中使用GDI+与PrintDocument实现打印_字符串_05

 50C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**///// 正文第一行

 51C#中使用GDI+与PrintDocument实现打印_字符串_05    string r1 = a3[1] as String;

 52C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(r1))

 53C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 54C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(r1, fText, Brushes.Black, left, y);

 55C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref r1);

 56C#中使用GDI+与PrintDocument实现打印_字符串_05a3[1] = r1;

 57C#中使用GDI+与PrintDocument实现打印_字符串_05y += textHeight + textMargin; // 3

 58C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 59C#中使用GDI+与PrintDocument实现打印_字符串_05

 60C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 61C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

 62C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 63C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

 64C#中使用GDI+与PrintDocument实现打印_字符串_05return;

 65C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 66C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 67C#中使用GDI+与PrintDocument实现打印_字符串_05

 68C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**///// 正文第二行

 69C#中使用GDI+与PrintDocument实现打印_字符串_05    string r2 = a3[2] as String;

 70C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(r2))

 71C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 72C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(r2, fText, Brushes.Black, left, y);

 73C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref r2);

 74C#中使用GDI+与PrintDocument实现打印_字符串_05a3[2] = r2;

 75C#中使用GDI+与PrintDocument实现打印_字符串_05y += textHeight + textMargin; // 4

 76C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 77C#中使用GDI+与PrintDocument实现打印_字符串_05

 78C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 79C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

 80C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 81C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

 82C#中使用GDI+与PrintDocument实现打印_字符串_05return;

 83C#中使用GDI+与PrintDocument实现打印_字符串_22    }

 84C#中使用GDI+与PrintDocument实现打印_字符串_05    //

 85C#中使用GDI+与PrintDocument实现打印_字符串_05

 86C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**/////内容

 87C#中使用GDI+与PrintDocument实现打印_字符串_05    string column = a3[3] as string;

 88C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(column))

 89C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

 90C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19string[] c = column.Split(new char[] C#中使用GDI+与PrintDocument实现打印_5g_04{ '*' });

 91C#中使用GDI+与PrintDocument实现打印_字符串_05Rectangle R1 = new Rectangle(left, y, oneWidth, oneHeight);

 92C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawRectangle(Pens.Black, R1);

 93C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(R1.X + R1.Width * 4 / 16, R1.Y), new Point(R1.X + R1.Width * 4 / 16, R1.Y + R1.Height));

 94C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(R1.X + R1.Width * 10 / 16, R1.Y), new Point(R1.X + R1.Width * 10 / 16, R1.Y + R1.Height));

 95C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(R1.X + R1.Width * 12 / 16, R1.Y), new Point(R1.X + R1.Width * 12 / 16, R1.Y + R1.Height));

 96C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(R1.X + R1.Width * 14 / 16, R1.Y), new Point(R1.X + R1.Width * 14 / 16, R1.Y + R1.Height));

 97C#中使用GDI+与PrintDocument实现打印_字符串_05

 98C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(c[0], fText, Brushes.Black, R1.X + rectangleMargin, R1.Y + rectangleMargin); // 项目编号 //a4.1

 99C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(c[1], fText, Brushes.Black, R1.X + rectangleMargin + R1.Width * 4 / 16, R1.Y + rectangleMargin);// 项目名称 // a4.2

100C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(c[2], fText, Brushes.Black, R1.X + rectangleMargin + R1.Width * 10 / 16, R1.Y + rectangleMargin);//单价 //a4.3

101C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(c[3], fText, Brushes.Black, R1.X + rectangleMargin + R1.Width * 12 / 16, R1.Y + rectangleMargin); //数量 //a4.4

102C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(c[4], fText, Brushes.Black, R1.X + rectangleMargin + R1.Width * 14 / 16, R1.Y + rectangleMargin);//单位 //a4.5

103C#中使用GDI+与PrintDocument实现打印_字符串_05

104C#中使用GDI+与PrintDocument实现打印_字符串_05

105C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref column);

106C#中使用GDI+与PrintDocument实现打印_字符串_05a3[3] = column;

107C#中使用GDI+与PrintDocument实现打印_字符串_05y += oneHeight;

108C#中使用GDI+与PrintDocument实现打印_字符串_22    }

109C#中使用GDI+与PrintDocument实现打印_字符串_05    //

110C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

111C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

112C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

113C#中使用GDI+与PrintDocument实现打印_字符串_05return;

114C#中使用GDI+与PrintDocument实现打印_字符串_22    }

115C#中使用GDI+与PrintDocument实现打印_字符串_05    //

116C#中使用GDI+与PrintDocument实现打印_字符串_05

117C#中使用GDI+与PrintDocument实现打印_字符串_05    string[] row = a3[4] as string[];

118C#中使用GDI+与PrintDocument实现打印_字符串_05    int Row = row.Length;

119C#中使用GDI+与PrintDocument实现打印_字符串_05    for (int i = 0; i < Row; i++)

120C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

121C#中使用GDI+与PrintDocument实现打印_字符串_05if (!this.JudgeString(row[i]))

122C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19C#中使用GDI+与PrintDocument实现打印_5g_04{

123C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    string[] r = row[i].Split(new Char[] C#中使用GDI+与PrintDocument实现打印_5g_04{ '*' });

124C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 0 / 16, y), new Point(left + oneWidth * 0 / 16, y + oneHeight));

125C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 4 / 16, y), new Point(left + oneWidth * 4 / 16, y + oneHeight));

126C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 10 / 16, y), new Point(left + oneWidth * 10 / 16, y + oneHeight));

127C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 12 / 16, y), new Point(left + oneWidth * 12 / 16, y + oneHeight));

128C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 14 / 16, y), new Point(left + oneWidth * 14 / 16, y + oneHeight));

129C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left + oneWidth * 16 / 16, y), new Point(left + oneWidth * 16 / 16, y + oneHeight));

130C#中使用GDI+与PrintDocument实现打印_字符串_05

131C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawString(r[0], fText, Brushes.Red, left + rectangleMargin, y + rectangleMargin); //a5.1

132C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawString(r[1], fText, Brushes.Red, left + rectangleMargin + oneWidth * 4 / 16, y + rectangleMargin); //a5.2

133C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawString(r[2], fText, Brushes.Red, left + rectangleMargin + oneWidth * 10 / 16, y + rectangleMargin);//a5.3

134C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawString(r[3], fText, Brushes.Red, left + rectangleMargin + oneWidth * 12 / 16, y + rectangleMargin);//a5.4

135C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawString(r[4], fText, Brushes.Red, left + rectangleMargin + oneWidth * 14 / 16, y + rectangleMargin);//a5.5

136C#中使用GDI+与PrintDocument实现打印_字符串_05

137C#中使用GDI+与PrintDocument实现打印_字符串_05    this.AddPrintedSign(ref row[i]);

138C#中使用GDI+与PrintDocument实现打印_字符串_05    y += oneHeight;

139C#中使用GDI+与PrintDocument实现打印_字符串_22}

140C#中使用GDI+与PrintDocument实现打印_字符串_05//

141C#中使用GDI+与PrintDocument实现打印_字符串_05if (y >= e.PageBounds.Height - oneHeight)

142C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19C#中使用GDI+与PrintDocument实现打印_5g_04{

143C#中使用GDI+与PrintDocument实现打印_字符串_05    e.HasMorePages = true;

144C#中使用GDI+与PrintDocument实现打印_字符串_05    return;

145C#中使用GDI+与PrintDocument实现打印_字符串_22}

146C#中使用GDI+与PrintDocument实现打印_字符串_05//

147C#中使用GDI+与PrintDocument实现打印_字符串_05

148C#中使用GDI+与PrintDocument实现打印_字符串_05if (i == Row - 1)

149C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19C#中使用GDI+与PrintDocument实现打印_5g_04{

150C#中使用GDI+与PrintDocument实现打印_字符串_05    g.DrawLine(Pens.Black, new Point(left, y), new Point(sTotal.Width - left - right, y));

151C#中使用GDI+与PrintDocument实现打印_字符串_22}

152C#中使用GDI+与PrintDocument实现打印_字符串_22    }

153C#中使用GDI+与PrintDocument实现打印_字符串_05

154C#中使用GDI+与PrintDocument实现打印_字符串_05    //费用累计

155C#中使用GDI+与PrintDocument实现打印_字符串_05    //

156C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

157C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

158C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

159C#中使用GDI+与PrintDocument实现打印_字符串_05return;

160C#中使用GDI+与PrintDocument实现打印_字符串_22    }

161C#中使用GDI+与PrintDocument实现打印_字符串_05    //

162C#中使用GDI+与PrintDocument实现打印_字符串_05

163C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**/////费用累计

164C#中使用GDI+与PrintDocument实现打印_字符串_05    string feeTotal = a3[5] as String;

165C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(feeTotal))

166C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

167C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19string[] feeT = feeTotal.Split(new char[] C#中使用GDI+与PrintDocument实现打印_5g_04{ '*' });

168C#中使用GDI+与PrintDocument实现打印_字符串_05Rectangle R3 = new Rectangle(left, y, oneWidth, oneHeight);

169C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawRectangle(Pens.Black, R3);

170C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(left + oneWidth * 10 / 16, y), new Point(left + oneWidth * 10 / 16, y + R3.Height));

171C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(feeT[0], fText, Brushes.Black, R3.X + rectangleMargin, y + rectangleMargin);

172C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(feeT[1], fText, Brushes.Black, left + 2 * rectangleMargin + R3.Width * 10 / 16, y + rectangleMargin);

173C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref feeTotal);

174C#中使用GDI+与PrintDocument实现打印_字符串_05a3[5] = feeTotal;

175C#中使用GDI+与PrintDocument实现打印_字符串_05y += oneHeight;

176C#中使用GDI+与PrintDocument实现打印_字符串_22    }

177C#中使用GDI+与PrintDocument实现打印_字符串_05

178C#中使用GDI+与PrintDocument实现打印_字符串_05    //

179C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - oneHeight)

180C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

181C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

182C#中使用GDI+与PrintDocument实现打印_字符串_05return;

183C#中使用GDI+与PrintDocument实现打印_字符串_22    }

184C#中使用GDI+与PrintDocument实现打印_字符串_05    //

185C#中使用GDI+与PrintDocument实现打印_字符串_05

186C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**/////费用按金

187C#中使用GDI+与PrintDocument实现打印_字符串_05    string feeBalance = a3[6] as String;

188C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(feeBalance))

189C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

190C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19string[] feeB = feeBalance.Split(new char[] C#中使用GDI+与PrintDocument实现打印_5g_04{ '*' });

191C#中使用GDI+与PrintDocument实现打印_字符串_05Rectangle R4 = new Rectangle(left, y, oneWidth, oneHeight);

192C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawRectangle(Pens.Black, R4);

193C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawLine(Pens.Black, new Point(left + oneWidth * 10 / 16, y), new Point(left + oneWidth * 10 / 16, y + R4.Height));

194C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(feeB[0], fText, Brushes.Black, left + rectangleMargin, y + rectangleMargin);

195C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(feeB[1], fText, Brushes.Black, left + 2 * rectangleMargin + oneWidth * 10 / 16, y + rectangleMargin);

196C#中使用GDI+与PrintDocument实现打印_字符串_05

197C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref feeBalance);

198C#中使用GDI+与PrintDocument实现打印_字符串_05a3[6] = feeBalance;

199C#中使用GDI+与PrintDocument实现打印_字符串_05y += oneHeight;

200C#中使用GDI+与PrintDocument实现打印_字符串_22    }

201C#中使用GDI+与PrintDocument实现打印_字符串_05

202C#中使用GDI+与PrintDocument实现打印_字符串_05

203C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**///// 备注

204C#中使用GDI+与PrintDocument实现打印_字符串_05    //string remark = " 备注:此清单一式两份,正联由患者或者家属签字,科室留存,付联由患者保存,可随时查询。如24小时不签字,不质疑视为认可费用。如病情需要变更医嘱另行通知。\r\n" + 

205C#中使用GDI+与PrintDocument实现打印_字符串_05    //     " 注:省保或者市保的比例为自费比例。";

206C#中使用GDI+与PrintDocument实现打印_字符串_05    string remark1 = a3[7] as String;

207C#中使用GDI+与PrintDocument实现打印_字符串_05

208C#中使用GDI+与PrintDocument实现打印_字符串_05    SizeF remarkSize = g.MeasureString(remark1, fText);

209C#中使用GDI+与PrintDocument实现打印_字符串_05    int Row2 = (int)remarkSize.Width / (oneWidth - 2 * rectangleMargin);

210C#中使用GDI+与PrintDocument实现打印_字符串_05    if (Row2 * (oneWidth - 2 * rectangleMargin) < (int)remarkSize.Width)

211C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

212C#中使用GDI+与PrintDocument实现打印_字符串_05Row2 += 1;

213C#中使用GDI+与PrintDocument实现打印_字符串_22    }

214C#中使用GDI+与PrintDocument实现打印_字符串_05    //

215C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - (Row2 + 1) * textHeight + 2 * rectangleMargin + Row2 * textMargin)

216C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

217C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

218C#中使用GDI+与PrintDocument实现打印_字符串_05return;

219C#中使用GDI+与PrintDocument实现打印_字符串_22    }

220C#中使用GDI+与PrintDocument实现打印_字符串_05    //

221C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(remark1))

222C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

223C#中使用GDI+与PrintDocument实现打印_字符串_05Rectangle R5 = new Rectangle(left, y, oneWidth, (Row2 + 1) * textHeight + 2 * rectangleMargin + Row2 * textMargin);

224C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawRectangle(Pens.Black, R5);

225C#中使用GDI+与PrintDocument实现打印_字符串_05R5.Offset(2, 5);

226C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(remark1, fText, Brushes.Black, R5);

227C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref remark1);

228C#中使用GDI+与PrintDocument实现打印_字符串_05a3[7] = remark1;

229C#中使用GDI+与PrintDocument实现打印_字符串_05y += R5.Height;

230C#中使用GDI+与PrintDocument实现打印_字符串_22    }

231C#中使用GDI+与PrintDocument实现打印_字符串_05

232C#中使用GDI+与PrintDocument实现打印_字符串_05    //

233C#中使用GDI+与PrintDocument实现打印_字符串_05    if (y >= e.PageBounds.Height - 3 * oneHeight)

234C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

235C#中使用GDI+与PrintDocument实现打印_字符串_05e.HasMorePages = true;

236C#中使用GDI+与PrintDocument实现打印_字符串_05return;

237C#中使用GDI+与PrintDocument实现打印_字符串_22    }

238C#中使用GDI+与PrintDocument实现打印_字符串_05

239C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    /**/////签字

240C#中使用GDI+与PrintDocument实现打印_字符串_05    string signature = a3[8] as String;

241C#中使用GDI+与PrintDocument实现打印_字符串_05    Rectangle R6 = new Rectangle(left, y, oneWidth, 2 * rectangleMargin + 3 * textHeight + 2 * textMargin);

242C#中使用GDI+与PrintDocument实现打印_字符串_05    if (!this.JudgeString(signature))

243C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

244C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawRectangle(Pens.Black, R6);

245C#中使用GDI+与PrintDocument实现打印_字符串_05g.DrawString(signature, fText, Brushes.Black, left, y + rectangleMargin + textMargin + textHeight);

246C#中使用GDI+与PrintDocument实现打印_字符串_05this.AddPrintedSign(ref signature);

247C#中使用GDI+与PrintDocument实现打印_字符串_05a3[8] = signature;

248C#中使用GDI+与PrintDocument实现打印_字符串_05y += R6.Height;

249C#中使用GDI+与PrintDocument实现打印_字符串_22    }

250C#中使用GDI+与PrintDocument实现打印_字符串_05    j++;

251C#中使用GDI+与PrintDocument实现打印_字符串_06}

252C#中使用GDI+与PrintDocument实现打印_数据源j = 0; // 打印完毕

253C#中使用GDI+与PrintDocument实现打印_数据源e.HasMorePages = false;


判断一行内容是否已经打印过:

 


 1C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03/**//// <summary>

 2C#中使用GDI+与PrintDocument实现打印_字符串_05/// 判断该字符串最后一个字符是否是 * 号,如果是,则表示已经打印过

 3C#中使用GDI+与PrintDocument实现打印_字符串_05/// </summary>

 4C#中使用GDI+与PrintDocument实现打印_字符串_05/// <param name="s">需要判断的字符串</param>

 5C#中使用GDI+与PrintDocument实现打印_字符串_06/// <returns>如果有则返回true,否则返回false</returns>

 6C#中使用GDI+与PrintDocument实现打印_数据源private bool JudgeString( string s )

 7C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03C#中使用GDI+与PrintDocument实现打印_5g_04{

 8C#中使用GDI+与PrintDocument实现打印_字符串_05    int l = s.Length;

 9C#中使用GDI+与PrintDocument实现打印_字符串_05    if( s[ l - 1 ] != '*' )

10C#中使用GDI+与PrintDocument实现打印_gdi+_18C#中使用GDI+与PrintDocument实现打印_5g_19    C#中使用GDI+与PrintDocument实现打印_5g_04{

11C#中使用GDI+与PrintDocument实现打印_字符串_05      return false;

12C#中使用GDI+与PrintDocument实现打印_字符串_22    }

13C#中使用GDI+与PrintDocument实现打印_字符串_05    return true;

14C#中使用GDI+与PrintDocument实现打印_字符串_06}

15C#中使用GDI+与PrintDocument实现打印_数据源 

16C#中使用GDI+与PrintDocument实现打印_数据源将已经打印过的内容标记为已打印

17C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03/**//// <summary>

18C#中使用GDI+与PrintDocument实现打印_字符串_05/// 将已经打印过的行最后一个字符标记为*,表示该行已经打印

19C#中使用GDI+与PrintDocument实现打印_字符串_05/// </summary>

20C#中使用GDI+与PrintDocument实现打印_字符串_06/// <param name="s">字符串对象</param>

21C#中使用GDI+与PrintDocument实现打印_数据源private void AddPrintedSign( ref string s )

22C#中使用GDI+与PrintDocument实现打印_gdi+_02C#中使用GDI+与PrintDocument实现打印_数据源_03C#中使用GDI+与PrintDocument实现打印_5g_04{

23C#中使用GDI+与PrintDocument实现打印_字符串_05    int l = s.Length;

24C#中使用GDI+与PrintDocument实现打印_字符串_05    s = s.Replace( s.Substring( l - 1, 1 ), "*" );

25C#中使用GDI+与PrintDocument实现打印_字符串_06}