/// <summary> /// 打印txt文檔 /// </summary> class PrintTxt { System.Drawing.Printing.PrintDocument printDocument = new System.Drawing.Printing.PrintDocument(); int linesText = 0;//內容行數 int linesPerPage = 0;//一頁的行數 int currentPage = 0;//當前頁 int pageCount = 0;//多少頁 string[] lines;//存儲內容 int icount = 0;//行數 string textString = ""; public PrintTxt(string txt) { textString = txt;//給內容進行賦值 printDocument.PrintPage += PrintDocument_PrintPage; printDocument.BeginPrint += PrintDocument_BeginPrint; } private void PrintDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { StringReader s1 = new StringReader(textString); string s = s1.ReadToEnd(); lines = s.Split(new string[] { "\n" }, StringSplitOptions.None); } private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { System.Drawing.Graphics g = e.Graphics; //得到繪圖對象 float yPosition = 0; //繪製字符串的縱向位置 float xPosition = 0; float leftMargin = e.MarginBounds.Left; //左邊距 float topMargin = e.MarginBounds.Top; //上邊距 linesText = lines.Count(); System.Drawing.Font printFont = new System.Drawing.Font("宋體", 10); //當前的打印字體 System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);//刷子 linesPerPage = (int)(e.MarginBounds.Height / printFont.GetHeight(g));//每頁可打印的行數 pageCount = linesText % linesPerPage == 0 ? (linesText / linesPerPage) : (linesText / linesPerPage + 1); for (int i = 0; i < linesPerPage; i++) { yPosition = topMargin + (i * printFont.GetHeight(g)) - 30; xPosition = leftMargin + (printFont.GetHeight(g)) + 5; if (icount == linesText) { return; } g.DrawString(lines[icount], printFont, myBrush, xPosition, yPosition, new System.Drawing.StringFormat()); icount++; } currentPage++; if (currentPage < pageCount) { e.HasMorePages = true; } else { e.HasMorePages = false; } } public void StartPrintTxt() { printDocument.Print(); } }
打印的過程大體就是將Textbox裏的內容獲取行數,而後計算一頁打印多少行,而後總共打印多少頁字體