So the goal is to be able to print a given document type (word, pdf, excel, etc.) with same formatting as the document would appear in it's respective application. The problem is that I get garbage text when sent to the printer... I have tried various (a lot we'll leave it at) usages of PrintDocument structures so below is my current structure with the two main methods.
private void PrintTest_1(string fullFilePath) { _streamToPrint = new StreamReader(fullFilePath); _printFont = new Font("Courier New", 10); PrintDocument pd = new PrintDocument();
pd.PrintPage += OnPrintPage;
try { try { pd.Print(); } finally { _streamToPrint.Close(); _streamToPrint.Dispose(); } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } }
private void OnPrintPage(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);
// Print each line of the file. 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; }
Assistance and references would be greatly appreciated!
Paul R.