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

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

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

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

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

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

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

猜你在找的VB相关文章