如何实现VB.NET 打印控件的使用

前端之家收集整理的这篇文章主要介绍了如何实现VB.NET 打印控件的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

system.drawing.printing 命名空间
printerSettings 打印机设置类
PageSettings 页面设置类
PrintPageEventArgs 要打印页的设置信息类
一、打印图片(加入控件printdocument1方法

  1. PublicClassForm1@H_404_22@@H_404_22@
  2. PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click@H_404_22@
  3. Try@H_404_22@
  4. AddHandlerPrintDocument1.PrintPage,AddressOfMe.PrintGraphics@H_404_22@
  5. PrintDocument1.Print()@H_404_22@
  6. CatchexAsException@H_404_22@
  7. MsgBox(ex.Message)@H_404_22@
  8. EndTry@H_404_22@
  9. EndSub@H_404_22@
  10. @H_404_22@
  11. PrivateSubPrintGraphics(ByValsenderAsObject,ByValevAsSystem.Drawing.Printing.PrintPageEventArgs)@H_404_22@
  12. ev.Graphics.DrawImage(System.Drawing.Image.FromFile(TextBox1.Text),ev.Graphics.VisibleClipBounds)@H_404_22@
  13. ev.HasMorePages@H_404_22@=@H_404_22@False@H_404_22@@H_404_22@@H_404_22@
  14. EndSub@H_404_22@
  15. EndClass @H_404_22@
二、打印文字(创建对象printdocument方法@H_404_22@
?
    DimprintDocAsNewSystem.Drawing.Printing.PrintDocument@H_404_22@
  1. AddHandlerprintDoc.PrintPage,AddressOfMe.PrintText@H_404_22@
  2. printDoc.Print()@H_404_22@
  3. CatchexAsException@H_404_22@
  4. MsgBox(ex.Message)@H_404_22@
  5. EndTry@H_404_22@
  6. @H_404_22@
  7. PrivateSubPrintText(ByValsenderAsObject,ByValevAsSystem.Drawing.Printing.PrintPageEventArgs)@H_404_22@
  8. ev.Graphics.DrawString(TextBox1.Text,NewFont("Arial",11,FontStyle.Bold),Brushes.Black,40,40)@H_404_22@
  9. ev.HasMorePages@H_404_22@=@H_404_22@False@H_404_22@@H_404_22@@H_404_22@
  10. EndClass @H_404_22@

上面两个方法都是简单的方法,但有重大的缺点:
1、字符串不会自动转行,也就是说过长的字符串会“打印”到页面的“外面”去;
2、只能打印一页。
下面来解决上面两个问题。
三、完美打印过长的字符串(占有几页)

描述:open按钮打开一个对话框,选择一个文件,并将文本反映到richtextBox上。同时激活print,再按,就执行打印。

[vb] ?
    Imports@H_404_22@System.IO@H_404_22@@H_404_22@
  1. Imports@H_404_22@System.Drawing.Printing@H_404_22@@H_404_22@
  2. Public@H_404_22@@H_404_22@Class@H_404_22@Form1@H_404_22@@H_404_22@
  3. Private@H_404_22@PrintPageSettings@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@PageSettings@H_404_22@@H_404_22@
  4. Private@H_404_22@StringToPrint@H_404_22@As@H_404_22@@H_404_22@String@H_404_22@@H_404_22@@H_404_22@
  5. Private@H_404_22@PrintFont@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@Font(@H_404_22@"Arial"@H_404_22@,10)@H_404_22@@H_404_22@
  6. Private@H_404_22@@H_404_22@Sub@H_404_22@btnOpen_Click(@H_404_22@ByVal@H_404_22@sender@H_404_22@As@H_404_22@System.@H_404_22@Object@H_404_22@,@H_404_22@ByVal@H_404_22@e@H_404_22@As@H_404_22@System.EventArgs)@H_404_22@Handles@H_404_22@btnOpen.Click@H_404_22@@H_404_22@
  7. Dim@H_404_22@FilePath@H_404_22@As@H_404_22@@H_404_22@String@H_404_22@@H_404_22@@H_404_22@
  8. OpenFileDialog1.Filter="Textfiles(*.txt)|*.txt"@H_404_22@@H_404_22@@H_404_22@
  9. OpenFileDialog1.ShowDialog()@H_404_22@
  10. If@H_404_22@OpenFileDialog1.FileName<>@H_404_22@""@H_404_22@@H_404_22@Then@H_404_22@@H_404_22@@H_404_22@
  11. FilePath=OpenFileDialog1.FileName@H_404_22@
  12. Try@H_404_22@@H_404_22@@H_404_22@
  13. Dim@H_404_22@MyFileStream@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@FileStream(FilePath,FileMode.Open)@H_404_22@@H_404_22@
  14. RichTextBox1.LoadFile(MyFileStream,RichTextBoxStreamType.PlainText)@H_404_22@
  15. MyFileStream.Close()@H_404_22@
  16. StringToPrint=RichTextBox1.Text'初始化打印字符串@H_404_22@@H_404_22@@H_404_22@
  17. btnPrint.Enabled=True@H_404_22@@H_404_22@@H_404_22@
  18. Catch@H_404_22@ex@H_404_22@As@H_404_22@Exception@H_404_22@@H_404_22@
  19. MessageBox.Show(ex.Message)@H_404_22@
  20. End@H_404_22@@H_404_22@Try@H_404_22@@H_404_22@@H_404_22@
  21. End@H_404_22@@H_404_22@If@H_404_22@@H_404_22@@H_404_22@
  22. End@H_404_22@@H_404_22@Sub@H_404_22@@H_404_22@@H_404_22@
  23. Private@H_404_22@@H_404_22@Sub@H_404_22@btnPrint_Click(@H_404_22@ByVal@H_404_22@sender@H_404_22@As@H_404_22@System.@H_404_22@Object@H_404_22@,@H_404_22@ByVal@H_404_22@e@H_404_22@As@H_404_22@System.EventArgs)@H_404_22@Handles@H_404_22@btnPrint.Click@H_404_22@@H_404_22@
  24. Try@H_404_22@@H_404_22@@H_404_22@
  25. '指定当前页设置@H_404_22@@H_404_22@@H_404_22@
  26. PrintDocument1.DefaultPageSettings=PrintPageSettings@H_404_22@
  27. '指定“打印”对话框的文档并显示@H_404_22@@H_404_22@@H_404_22@
  28. StringToPrint=RichTextBox1.Text@H_404_22@
  29. PrintDialog1.Document=PrintDocument1@H_404_22@
  30. Dim@H_404_22@result@H_404_22@As@H_404_22@DialogResult=PrintDialog1.ShowDialog()@H_404_22@@H_404_22@
  31. If@H_404_22@result=DialogResult.OK@H_404_22@Then@H_404_22@@H_404_22@@H_404_22@
  32. PrintDocument1.Print()'打印,并非由“打印”对话框控制.正如OpenFileDialog表现的形式一样。@H_404_22@@H_404_22@@H_404_22@
  33. End@H_404_22@@H_404_22@If@H_404_22@@H_404_22@@H_404_22@
  34. Catch@H_404_22@ex@H_404_22@As@H_404_22@Exception@H_404_22@@H_404_22@
  35. MessageBox.Show(ex.Message)@H_404_22@
  36. End@H_404_22@@H_404_22@Try@H_404_22@@H_404_22@@H_404_22@
  37. Private@H_404_22@@H_404_22@Sub@H_404_22@PrintDocument1_PrintPage(@H_404_22@ByVal@H_404_22@sender@H_404_22@As@H_404_22@System.@H_404_22@Object@H_404_22@,@H_404_22@ByVal@H_404_22@e@H_404_22@As@H_404_22@System.Drawing.Printing.PrintPageEventArgs)@H_404_22@Handles@H_404_22@PrintDocument1.PrintPage@H_404_22@@H_404_22@
  38. Dim@H_404_22@numChars@H_404_22@As@H_404_22@@H_404_22@Integer@H_404_22@@H_404_22@@H_404_22@
  39. Dim@H_404_22@numLines@H_404_22@As@H_404_22@@H_404_22@Integer@H_404_22@@H_404_22@@H_404_22@
  40. Dim@H_404_22@stringForPage@H_404_22@As@H_404_22@@H_404_22@String@H_404_22@@H_404_22@@H_404_22@
  41. Dim@H_404_22@strFormat@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@StringFormat@H_404_22@@H_404_22@
  42. '根据页面设置,定义可用的页面区域(打印区域)@H_404_22@@H_404_22@@H_404_22@
  43. Dim@H_404_22@rectDraw@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@RectangleF(e.MarginBounds.Left,e.MarginBounds.Top,e.MarginBounds.Width,e.MarginBounds.Height)@H_404_22@@H_404_22@
  44. '定义区域,来确定一个页面可容纳多少文本,并使文本高度少一行,以免文本被减短@H_404_22@@H_404_22@@H_404_22@
  45. Dim@H_404_22@sizeMeasure@H_404_22@As@H_404_22@@H_404_22@New@H_404_22@SizeF(e.MarginBounds.Width,e.MarginBounds.Height-PrintFont.GetHeight(e.Graphics))@H_404_22@@H_404_22@
  46. '处理长字符串时,按单词进行断开(换行)@H_404_22@@H_404_22@@H_404_22@
  47. strFormat.Trimming=StringTrimming.Word@H_404_22@
  48. '用MeasureString计算出可容纳的字符串个数numChars和行数numLines@H_404_22@@H_404_22@@H_404_22@
  49. e.Graphics.MeasureString(StringToPrint,PrintFont,sizeMeasure,strFormat,numChars,numLines)@H_404_22@
  50. '计算出适应页面的字符串@H_404_22@@H_404_22@@H_404_22@
  51. stringForPage=StringToPrint.Substring(0,numChars)@H_404_22@
  52. '(逻辑上)在当前页打印字符串@H_404_22@@H_404_22@@H_404_22@
  53. e.Graphics.DrawString(stringForPage,rectDraw,strFormat)@H_404_22@
  54. '若还有需要打印的文本,则继续处理剩下的页面@H_404_22@@H_404_22@@H_404_22@
  55. If@H_404_22@numChars<StringToPrint.Length@H_404_22@Then@H_404_22@@H_404_22@@H_404_22@
  56. '删除已经打印的字符串@H_404_22@@H_404_22@@H_404_22@
  57. StringToPrint=StringToPrint.Substring(numChars)@H_404_22@
  58. e.HasMorePages=True@H_404_22@@H_404_22@@H_404_22@
  59. Else@H_404_22@@H_404_22@@H_404_22@
  60. e.HasMorePages=False@H_404_22@@H_404_22@@H_404_22@
  61. End@H_404_22@@H_404_22@Sub@H_404_22@@H_404_22@@H_404_22@
  62. End@H_404_22@@H_404_22@Class@H_404_22@@H_404_22@@H_404_22@
开始读了N久没明白什么意思?看了一下午,再逐条进行调试才明白原来打印的原理是这样的:@H_404_22@
1、首先Printdialog1打印对话框,只是设置选择哪个打印机,用哪种方式来打印(通过PrintDialog1.Document = PrintDocument1来进行关联),与具体打印的字符串无关。@H_404_22@
2、关键:PrintPage事件发生在打印“当前”页面,也就是说打印3页,这个事件就会发生3次。每次可以通过此事件来设置页面内容(逻辑上)。这样就可以控制打印多页。@H_404_22@
3、通过MeasureString来计算每页可容纳的字符串和行数,这样就很好的控制每页的具体字符串,循环这个方法计算剩下的字符进行每页设置并打印。@H_404_22@
增加两个按钮,一个页面设置,一个是页面预览,代码如下:@H_404_22@
?
    Private@H_404_22@@H_404_22@Sub@H_404_22@btnSetup_Click(@H_404_22@ByVal@H_404_22@sender@H_404_22@As@H_404_22@System.@H_404_22@Object@H_404_22@,@H_404_22@ByVal@H_404_22@e@H_404_22@As@H_404_22@System.EventArgs)@H_404_22@Handles@H_404_22@btnSetup.Click@H_404_22@@H_404_22@
  1. Try@H_404_22@@H_404_22@'页面设置@H_404_22@@H_404_22@@H_404_22@
  2. PageSetupDialog1.PageSettings=PrintPageSettings@H_404_22@
  3. PageSetupDialog1.ShowDialog()@H_404_22@
  4. Private@H_404_22@@H_404_22@Sub@H_404_22@btnPreview_Click(@H_404_22@ByVal@H_404_22@sender@H_404_22@As@H_404_22@System.@H_404_22@Object@H_404_22@,@H_404_22@ByVal@H_404_22@e@H_404_22@As@H_404_22@System.EventArgs)@H_404_22@Handles@H_404_22@btnPreview.Click@H_404_22@@H_404_22@
  5. Try@H_404_22@@H_404_22@'页面预览@H_404_22@@H_404_22@@H_404_22@
  6. StringToPrint=RichTextBox1.Text@H_404_22@
  7. PrintPreviewDialog1.Document=PrintDocument1@H_404_22@
  8. PrintPreviewDialog1.ShowDialog()@H_404_22@
  9. End@H_404_22@@H_404_22@Sub@H_404_22@@H_404_22@

猜你在找的VB相关文章