Click here to Skip to main content
15,895,799 members
Articles / Programming Languages / C#

C# Script: The Missing Puzzle Piece

Rate me:
Please Sign up or sign in to vote.
4.88/5 (184 votes)
6 Aug 2014MIT24 min read 1.3M   9.4K   531  
An article on a "scripting engine" for the C# language
using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;

class Script
{
	static public void Main(string[] args)
	{
		//the following code is for testing only
		SimplePrinting printer = new SimplePrinting();
		printer.PrintFile(@"C:\BOOT.ini", true);
		printer.Print(@"qqqqqqqqq 3333333333 4444444444444444 5555555555555 66666666666666 7777777777777 888888888888", true);
	}

	public class SimplePrinting 
	{
		public void PrintFile (string filePath, bool preview)
		{
			PrintOut(filePath, true, preview);
		}
		public void Print (string text, bool preview)
		{
			PrintOut(text, false, preview);
		}

		private Font printFont;
		private TextReader streamToPrint;

		// The PrintPage event is raised for each page to be printed.
		private void PrintPageRoutine(object sender, PrintPageEventArgs ev) 
		{
			float linesPerPage = 0;
			float yPos =  0;
			int count = 0;
			float leftMargin = ev.MarginBounds.Left;
			float topMargin = ev.MarginBounds.Top;
			String line=null;
            
			// Calculate the number of lines per page.
			linesPerPage = ev.MarginBounds.Height  / printFont.GetHeight(ev.Graphics) ;

			// Iterate over the file, printing each line.
			while (count < linesPerPage && ((line=streamToPrint.ReadLine()) != null)) 
			{
				yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
				ev.Graphics.DrawString (line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
				count++;
			}

			// If more lines exist, print another page.
			if (line != null) 
				ev.HasMorePages = true;
			else 
				ev.HasMorePages = false;
		}
		private void PrintOut(string data, bool file, bool prview)
		{
			try 
			{
				using (streamToPrint = file ? (TextReader)new StreamReader (data) : (TextReader)new StringReader(data))
				{
					printFont = new Font("Arial", 10);
					PrintDocument pd = new PrintDocument(); 
					pd.PrintPage += new PrintPageEventHandler(PrintPageRoutine);
					if (prview)
					{
						PrintPreviewDialog dlg = new PrintPreviewDialog();
						dlg.Document = pd;
						dlg.ShowDialog();
					}
					else
						pd.Print();
				} 
			} 
			catch(Exception ex) 
			{ 
				MessageBox.Show(ex.Message);
			}
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Program Manager
Australia Australia
I was born in Ukraine. After completing the university degree worked there as a Research Chemist. Last 23 years I live in Australia where I've got my second qualification as a Software Engineer.

"I am the lucky one: I do enjoy what I am doing!"

Comments and Discussions