C# 使用itextsharp打印医院门诊病人费用清单(可打印中文PDF)

C# 使用itextsharp打印医院门诊病人费用清单(可打印中文PDF) 

 

如有转载,请注明出处:http://www.cnblogs.com/flydoos/archive/2011/10/01/2197192.html

 

C# 使用itextsharp打印医院门诊病人费用清单(可打印中文PDF)  

 

背景说明:

因为是老师布置的作业,所以才做这个东西的。现在把源码发出来和大家一起学习,写得不好的地方,希望大家指教。谢谢。

 

作业要求:

C# 程序设计 第一节课 作业

建立一个基于控制台的程序,一个基于视窗的程序,两个程序将分别输出输出一张pdf 文件。不同的组的任务分别为:

1. 医院挂号注册卡,包括病人的基本信息。找一家医院找到一份真是的注册卡,根据这张真是注册卡设计出你的程序。

2. 医院化验单,给出病人的化验结果,该化验单应该通用,以给出不同的化验组合。

3. 医生处方,该处方应能真是反映所需信息,并重复使用。

4. 医院病历,该病历应实用与不同科室,记录病人的病情和医嘱。

5. 入院通知书。

6. 病危通知书。

7. 医院一般检验单。

8. 医院X射线检验单。

9. 医院CT检验单。

10. 手术通知单。

11. 交费单。

 


原型预览:

老师要求我们去医院找那些清单,然后模仿制作...貌似有些不现实,于是花了很长时间,总算在上网找到一个可以参考的模型,然后就直接开工了。原型的预览图: 

 

 

效果预览:


 

(WinForm 主程序,还有一个Console版本的,没啥好看,反正都差不多,只发这个就行了)

 

(打印出来的PDF截图效果)

 

完整源码:

复制代码
//
// 作者:牛A与牛C之间
// Q Q:1046559384   C#/Java技术交流群:96020642
// 微博: http://weibo.com/flydoos
// 博客: http://www.cnblogs.com/flydoos
// 日期:2011-09-05
//
using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace PDFGenerator
{
     public  partial  class FrmPdfGenerator : Form
    {
         public  static  float Money;

         #region 初始化数据
         private  void InitValue()
        {
            dgvSource.Rows.Add( " 110100001 "" 挂号费 "" "" "" 1.00 "" 1.00 "" 1.00 ");
            dgvSource.Rows.Add( " 110200003 "" 急诊诊查费 "" "" "" 6.00 "" 1.00 "" 6.00 ");
            dgvSource.Rows.Add( """ 罗红霉素缓释胶囊(罗施立) "" 0.15g/粒 "" "" 2.75 "" 4.00 "" 11.00 ");
            dgvSource.Rows.Add( """ 镇咳宁胶囊 "" 0.35g/粒 "" "" 0.83 "" 12.00 "" 9.96 ");
            dgvSource.Rows.Add( """ 感咳双清胶囊 "" 0.3g/粒 "" "" 0.93 "" 12.00 "" 11.16 ");
            dgvSource.Rows.Add( """ 酮替芬片 "" 1mg/片 "" "" 0.038 "" 4.00 "" 0.15 ");
            dgvSource.Rows.Add( """ 复方甲氧那明胶囊(阿斯美) "" "" "" 0.826 "" 6.00 "" 4.96 ");
            dgvSource.Rows.Add( """ 药袋(一次性) "" "" "" 0.09 "" 1.00 "" 0.09 ");
            dgvSource.Rows.Add( """ 药袋(一次性) "" "" "" 0.09 "" 1.00 "" 0.09 ");
            dgvSource.Rows.Add( """ 药袋(一次性) "" "" "" 0.09 "" 1.00 "" 0.09 ");
            dgvSource.Rows.Add( """ 去零分 "" "" "" 0.01 "" 1.00 "" 0.01 ");
            DgvSourceCellClick( nullnull);
        }
         #endregion

         #region 计算总金额
         private  string TotalMoney()
        {
             try
            {
                Money =  0.00f;
                 for ( int i =  0; i < dgvSource.Rows.Count -  1; i++)
                {
                     if (dgvSource.Rows[i].Cells[ 1].Value.ToString() !=  " 去零分 ")
                        Money += Convert.ToSingle(dgvSource.Rows[i].Cells[ 6].Value);
                     // else
                    
// Money -= Convert.ToSingle(dgvSource.Rows[i].Cells[6].Value);
                }
                 return  string.Format( " {0:N2} ", Money);
            }
             catch (Exception)
            {
                 return  " 0.00 ";
            }
        }
         #endregion

         #region 单价*数量=金额
         private  void CountMoney()
        {
             try
            {
                 for ( int i =  0; i < dgvSource.Rows.Count -  1; i++)
                {
                    dgvSource.Rows[i].Cells[ 6].Value =  string.Format( " {0:N2} ",
                                                                     Convert.ToSingle(dgvSource.Rows[i].Cells[ 4].Value) *
                                                                     Convert.ToSingle(dgvSource.Rows[i].Cells[ 5].Value));
                }
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message,  @" 出错 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
         #endregion

         public FrmPdfGenerator()
        {
            InitializeComponent();
        }

         private  void FrmPdfGeneratorLoad( object sender, EventArgs e)
        {
            txtDate.Text = DateTime.Now.ToShortDateString();
            InitValue();
        }

         #region 更新状态栏
         private  void DgvSourceCellClick( object sender, DataGridViewCellEventArgs e)
        {
             try
            {
                lblStatus.Text =  @" 状态栏:当前共有  " + (dgvSource.RowCount -  1) +  @"  条记录,金额合计为  " + TotalMoney() +  @"  元,坐标( " +
                 (dgvSource.CurrentCell.RowIndex +  1) +  @" " + (dgvSource.CurrentCell.ColumnIndex +  1) +
                  @" ";
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message,  @" 出错 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
         #endregion

         #region 打印费用清单
         private  void BtnPrintClick( object sender, EventArgs e)
        {
            Document myDocument =  new Document(PageSize.A4,  50505050);
             try
            {
                 string patientName = txtName.Text;
                 string patientNumber = txtPatientNumber.Text;
                 string sections = txtSections.Text;
                 string doctorName = txtDoctor.Text;
                 string cashier = txtCashier.Text;

                PdfWriter.GetInstance(myDocument,  new FileStream( " FeeList.pdf ", FileMode.Create));
                myDocument.Open();
                 string fontPath = Environment.GetEnvironmentVariable( " WINDIR ") +  " \\FONTS\\SIMHEI.TTF "; // 强制中文字体,否则无法显示中文
                BaseFont baseFont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

                 // 标题居中
                Paragraph paragraph =  new Paragraph(txtCapital.Text,  new Font(baseFont,  16));
                paragraph.Alignment = Element.ALIGN_CENTER;
                myDocument.Add(paragraph);
                paragraph =
                     new Paragraph(
                         " \n姓名: " + patientName +  "      日期: " + txtDate.Text +  "      门诊号: " + patientNumber +  "      科室: " +
                        sections +  "      医生: " + doctorName +  "      收费员: " + cashier +  " \n\n "new Font(baseFont,  9));
                paragraph.Alignment = Element.ALIGN_LEFT;
                myDocument.Add(paragraph);

                 // 添加一个表格
                PdfPTable pdfPTable =  new PdfPTable(dgvSource.ColumnCount);
                pdfPTable.TotalWidth = myDocument.Right - myDocument.Left;
                 float[] widths = { 80f, 130f, 50f, 30f, 50f, 50f, 50f };
                pdfPTable.SetWidths(widths);
                pdfPTable.LockedWidth =  true;                 // 必须锁定宽度,否则修改无效

                
// 增加表头
                PdfPCell pdfPCell;
                 for ( int i =  0; i < dgvSource.ColumnCount; i++)
                {
                    pdfPCell =  new PdfPCell( new Phrase(dgvSource.Columns[i].HeaderText,  new Font(baseFont,  9)));
                    pdfPTable.AddCell(pdfPCell);
                }

                 // 增加详细数据
                 for ( int i =  0; i < dgvSource.RowCount -  1; i++)
                {
                     for ( int j =  0; j < dgvSource.ColumnCount; j++)
                    {
                        pdfPCell =  new PdfPCell( new Phrase(dgvSource.Rows[i].Cells[j].Value.ToString(),  new Font(baseFont,  9)));
                        pdfPTable.AddCell(pdfPCell);
                    }
                }

                myDocument.Add(pdfPTable);

                paragraph =  new Paragraph( " \n金额合计: " + TotalMoney(),  new Font(baseFont,  9));
                paragraph.Alignment = Element.ALIGN_CENTER;
                myDocument.Add(paragraph);

                myDocument.Close();

                MessageBox.Show( @" 打印成功,点击确定打开文件 "@" 成功 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                 try
                {
                    System.Diagnostics.Process.Start( " FeeList.pdf ");
                }
                 catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,  @" 出错 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message,  @" 出错 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
#endregion

         private  void BtnDeleteClick( object sender, EventArgs e)
        {
             try
            {
                dgvSource.Rows[dgvSource.CurrentCell.RowIndex].Selected =  true;
                 foreach (DataGridViewRow dgvRow  in dgvSource.SelectedRows)
                {
                    dgvSource.Rows.Remove(dgvRow);
                }
                DgvSourceCellClick( nullnull);
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message,  @" 出错 ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

         private  void BtnClearClick( object sender, EventArgs e)
        {
            dgvSource.Rows.Clear();
        }

         private  void BtnRecoverClick( object sender, EventArgs e)
        {
            dgvSource.Rows.Clear();
            InitValue();
        }

         private  void BtnExitClick( object sender, EventArgs e)
        {
            Application.Exit();
        }

         private  void BtnCalClick( object sender, EventArgs e)
        {
            CountMoney();
            DgvSourceCellClick( nullnull);
        }

    }

复制代码

 

 下载源码:网盘下载1  网盘下载2  备用下载3

 

特别注意:

如果你的不是VS2010,那么请到这里下载【Visual Studio 版本互转工具】,转换之后,就能用2005、2008打开2010的东西....下载:http://www.cnblogs.com/flydoos/archive/2011/09/19/2181106.html


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值