Introduction

This is a trial to print a Prescription using three controls: PrintPreviewDialog control, PrintDocument control and PrintDialog control.

print

My Project has one form (Form1) and two classes (clsReport and Globals).

Form1: has three text boxes for entering the data of the patient, the patient number and visit date.

Another three text boxes for entering the medication.

Three controls for printing: PrintPreviewDialog, PrintDocument and PrintDialog.

clsReport: has procedures for printing.

Globals: for some variables.

clsReport has the following three procedures:
  1. public void ReadReport()
  2. {
  3. try
  4. {
  5. // read data from Form1
  6. // you can get the data from any data file
  7. RepVisitDate = "Date" + ": " + Globals.VisitDate;
  8. RepSickName = "Name" + ": " + Globals.illName;
  9. RepSickNum = "File number" + ": " + Globals.illNum;
  10. Medicine1 = Globals.FirstMidc;
  11. Medicine2 = Globals.SecondMidc;
  12. Medicine3 = Globals.ThirdMidc;
  13. }
  14. catch
  15. {
  16. MessageBox.Show("Reading Error.");
  17. }
  18. private void ComputeLeftAll(Graphics g)
  19. {
  20. //compute the left location of all lines for,
  21. //Recipe head, Sick data and Medicine.
  22. Marginleft = Globals.leftMargin;
  23. Marginright = Globals.rightMargin;
  24. RepWid = Globals.ReportWid;
  25. int lenWork = (int)g.MeasureString(dcWork, ArialB14).Width;
  26. int lenDocHead1 = (int)g.MeasureString(DocHead1, ArialB18).Width;
  27. int lenDocHead2 = (int)g.MeasureString(DocHead2, ArialB16).Width;
  28. int lenSickVisit = (int)g.MeasureString(RepVisitDate, ArialB14).Width;
  29. int lenSickName = (int)g.MeasureString(RepSickName, ArialB14).Width;
  30. int lenSickNum = (int)g.MeasureString(RepSickNum, ArialB14).Width;
  31. int lenRepTail1 = (int)g.MeasureString(RepTail1, ArialB14).Width;
  32. xWork = Marginleft + (RepWid - lenWork) / 2;
  33. xDocHead1 = Marginleft + (RepWid - lenDocHead1) / 2;
  34. xDocHead2 = Marginleft + (RepWid - lenDocHead2) / 2;
  35. xSickName = Marginleft;
  36. xSickNum = Marginleft + (Marginright - Marginleft - lenSickNum) / 2;
  37. xSickVisit = Marginright - lenSickName;
  38. xRepTail1 = Marginleft + (Marginright - Marginleft - lenRepTail1) / 2;
  39. }
  40. public void DrawReport(Graphics g)
  41. {
  42. int CurrentY = Globals.topMargin;
  43. int CurrentX = Globals.leftMargin;
  44. try
  45. {
  46. // for Recipe
  47. ArialR14 = new Font("Arial", 14, FontStyle.Regular);
  48. int ArialRH14 = (int)(ArialR14.GetHeight(g));
  49. // for EyeHorus
  50. Font CorsivaFont = new Font("Monotype Corsiva", 18, FontStyle.Italic);
  51. int CorsivaHeight = (int)(CorsivaFont.GetHeight(g));
  52. // for Name
  53. ArialB14 = new Font("Arial", 14, FontStyle.Bold);
  54. int ArialBH14 = (int)(ArialB14.GetHeight(g));
  55. ArialB16 = new Font("Arial", 16, FontStyle.Bold);
  56. int ArialBH16 = (int)(ArialB16.GetHeight(g));
  57. ArialB18 = new Font("Arial", 18, FontStyle.Bold);
  58. int ArialBH18 = (int)(ArialB18.GetHeight(g));
  59. ArialB20 = new Font("Arial", 20, FontStyle.Bold);
  60. int ArialBH20 = (int)(ArialB20.GetHeight(g));
  61. ComputeLeftAll(g);
  62. SolidBrush myBrush = new SolidBrush(Color.Black);
  63. CurrentY = CurrentY + ArialRH14;
  64. //Draw Report Head:
  65. g.DrawString(dcWork, ArialB14, myBrush, xWork, CurrentY); //dcWorkAR
  66. CurrentY = CurrentY + ArialBH14;
  67. g.DrawString(DocHead1, ArialB18, myBrush, xDocHead1, CurrentY); //DocHeadAR1
  68. CurrentY = CurrentY + ArialBH20;
  69. g.DrawString(DocHead2, ArialB16, myBrush, xDocHead2, CurrentY); //DocHeadAR2
  70. CurrentY = CurrentY + 2 * ArialBH14;
  71. // Draw line
  72. g.DrawLine(new Pen(Brushes.Black), Marginleft, CurrentY, Marginright, CurrentY);
  73. CurrentY = CurrentY + ArialRH14;
  74. // Draw Personal Data:
  75. g.DrawString(RepSickName, ArialB14, myBrush, xSickName, CurrentY);
  76. g.DrawString(RepSickNum, ArialB14, myBrush, xSickNum, CurrentY);
  77. g.DrawString(RepVisitDate, ArialB14, myBrush, xSickVisit, CurrentY);
  78. CurrentY = CurrentY + 2 * ArialBH14;
  79. // Draw EyeHorus:
  80. g.DrawString(EyeHorus, CorsivaFont, myBrush, CurrentX, CurrentY);
  81. CurrentY = CurrentY + CorsivaHeight;
  82. // Draw Recipe:
  83. CurrentY = CurrentY + ArialRH14;
  84. g.DrawString(Medicine1, ArialR14, myBrush, CurrentX, CurrentY);
  85. CurrentY = CurrentY + ArialRH14;
  86. g.DrawString(Medicine2, ArialR14, myBrush, CurrentX, CurrentY);
  87. CurrentY = CurrentY + ArialRH14;
  88. g.DrawString(Medicine3, ArialR14, myBrush, CurrentX, CurrentY);
  89. // Go to end of page:
  90. CurrentY = Globals.bottomMargin - 4 * ArialRH14;
  91. // Draw line
  92. g.DrawLine(new Pen(Brushes.Black), Marginleft, CurrentY, Marginright, CurrentY);
  93. // Draw Report Tail:
  94. CurrentY = CurrentY + ArialRH14;
  95. g.DrawString(RepTail1, ArialB14, myBrush, xRepTail1, CurrentY); //RepTail1
  96. ArialB14.Dispose();
  97. ArialB16.Dispose();
  98. ArialB18.Dispose();
  99. ArialB20.Dispose();
  100. ArialR14.Dispose();
  101. CorsivaFont.Dispose();
  102. g.Dispose();
  103. }
  104. catch
  105. {
  106. string Msg = "Can't print, no Font!";
  107. MessageBox.Show(Msg, "Printing.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  108. }
  109. }

Using VB to print Prescription

  1. Public Sub ReadReport()
  2. Try
  3. ' read data from Form1
  4. ' you can get the data from any data file
  5. RepVisitDate = "Date" + ": " + VisitDate
  6. RepSickName = "Name" + ": " + illName
  7. RepSickNum = "File number" + ": " + illNum
  8. Medicine1 = FirstMidc
  9. Medicine2 = SecondMidc
  10. Medicine3 = ThirdMidc
  11. Catch
  12. MessageBox.Show("Reading Error.")
  13. End Try
  14. End Sub
  15. Private Sub ComputeLeftAll(ByVal g As Graphics)
  16. 'compute the left location of all lines for,
  17. 'Recipe head, Sick data and Medicine.
  18. Dim lenWork As Integer = Convert.ToInt32(g.MeasureString(dcWork, ArialB14).Width)
  19. Dim lenDocHead1 As Integer = Convert.ToInt32(g.MeasureString(DocHead1, ArialB18).Width)
  20. Dim lenDocHead2 As Integer = Convert.ToInt32(g.MeasureString(DocHead2, ArialB16).Width)
  21. Dim lenSickVisit As Integer = Convert.ToInt32(g.MeasureString(RepVisitDate, ArialB14).Width)
  22. Dim lenSickName As Integer = Convert.ToInt32(g.MeasureString(RepSickName, ArialB14).Width)
  23. Dim lenSickNum As Integer = Convert.ToInt32(g.MeasureString(RepSickNum, ArialB14).Width)
  24. Dim lenRepTail1 As Integer = Convert.ToInt32(g.MeasureString(RepTail1, ArialB14).Width)
  25. xWork = leftMargin + (ReportWid - lenWork) / 2
  26. xDocHead1 = leftMargin + (ReportWid - lenDocHead1) / 2
  27. xDocHead2 = leftMargin + (ReportWid - lenDocHead2) / 2
  28. xSickName = leftMargin
  29. xSickNum = leftMargin + (rightMargin - leftMargin - lenSickNum) / 2
  30. xSickVisit = rightMargin - lenSickName
  31. xRepTail1 = leftMargin + (rightMargin - leftMargin - lenRepTail1) / 2
  32. End Sub
  33. Public Sub DrawReport(ByVal g As Graphics)
  34. Dim CurrentY As Integer = topMargin
  35. Dim CurrentX As Integer = leftMargin
  36. Try
  37. ' for Recipe
  38. ArialR14 = New Font("Arial", 14, FontStyle.Regular)
  39. Dim ArialRH14 As Integer = Convert.ToInt32(ArialR14.GetHeight(g))
  40. ' for EyeHorus
  41. Dim CorsivaFont As Font = New Font("Monotype Corsiva", 18, FontStyle.Italic)
  42. Dim CorsivaHeight As Integer = Convert.ToInt32(CorsivaFont.GetHeight(g))
  43. ' for Name
  44. ArialB14 = New Font("Arial", 14, FontStyle.Bold)
  45. Dim ArialBH14 = Convert.ToInt32(ArialB14.GetHeight(g))
  46. ArialB16 = New Font("Arial", 16, FontStyle.Bold)
  47. Dim ArialBH16 As Integer = Convert.ToInt32(ArialB16.GetHeight(g))
  48. ArialB18 = New Font("Arial", 18, FontStyle.Bold)
  49. Dim ArialBH18 As Integer = Convert.ToInt32(ArialB18.GetHeight(g))
  50. ArialB20 = New Font("Arial", 20, FontStyle.Bold)
  51. Dim ArialBH20 As Integer = Convert.ToInt32(ArialB20.GetHeight(g))
  52. ComputeLeftAll(g)
  53. Dim myBrush As SolidBrush = New SolidBrush(Color.Black)
  54. CurrentY = CurrentY + ArialRH14
  55. 'Draw Report Head:
  56. g.DrawString(dcWork, ArialB14, myBrush, xWork, CurrentY) 'dcWorkAR
  57. CurrentY = CurrentY + ArialBH14
  58. g.DrawString(DocHead1, ArialB18, myBrush, xDocHead1, CurrentY) 'DocHeadAR1
  59. CurrentY = CurrentY + ArialBH20
  60. g.DrawString(DocHead2, ArialB16, myBrush, xDocHead2, CurrentY) 'DocHeadAR2
  61. CurrentY = CurrentY + 2 * ArialBH14
  62. ' Draw line
  63. g.DrawLine(New Pen(Brushes.Black), leftMargin, CurrentY, rightMargin, CurrentY)
  64. CurrentY = CurrentY + ArialRH14
  65. ' Draw Personal Data:
  66. g.DrawString(RepSickName, ArialB14, myBrush, xSickName, CurrentY)
  67. g.DrawString(RepSickNum, ArialB14, myBrush, xSickNum, CurrentY)
  68. g.DrawString(RepVisitDate, ArialB14, myBrush, xSickVisit, CurrentY)
  69. CurrentY = CurrentY + 2 * ArialBH14
  70. ' Draw EyeHorus:
  71. g.DrawString(EyeHorus, CorsivaFont, myBrush, CurrentX, CurrentY)
  72. CurrentY = CurrentY + CorsivaHeight
  73. ' Draw Recipe:
  74. CurrentY = CurrentY + ArialRH14
  75. g.DrawString(Medicine1, ArialR14, myBrush, CurrentX, CurrentY)
  76. CurrentY = CurrentY + ArialRH14
  77. g.DrawString(Medicine2, ArialR14, myBrush, CurrentX, CurrentY)
  78. CurrentY = CurrentY + ArialRH14
  79. g.DrawString(Medicine3, ArialR14, myBrush, CurrentX, CurrentY)
  80. ' Go to end of page:
  81. CurrentY = Globals.bottomMargin - 4 * ArialRH14
  82. ' Draw line
  83. g.DrawLine(New Pen(Brushes.Black), leftMargin, CurrentY, rightMargin, CurrentY)
  84. ' Draw Report Tail:
  85. CurrentY = CurrentY + ArialRH14
  86. g.DrawString(RepTail1, ArialB14, myBrush, xRepTail1, CurrentY) 'RepTail1
  87. ArialB14.Dispose()
  88. ArialB16.Dispose()
  89. ArialB18.Dispose()
  90. ArialB20.Dispose()
  91. ArialR14.Dispose()
  92. CorsivaFont.Dispose()
  93. g.Dispose()
  94. Catch
  95. Dim Msg As String = "Can't print, no Font!"
  96. MessageBox.Show(Msg, "Printing.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  97. End Try
  98. End Sub

Please read the code of Form1 then run the program to see the result.

If you have any idea or if you find any problems then please tell me.