system.drawing.printing 命名空间 printerSettings 打印机设置类 PageSettings 页面设置类 PrintPageEventArgs 要打印页的设置信息类 一、打印图片(加入控件printdocument1方法)
- PublicClassForm1
- PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
- Try
- AddHandlerPrintDocument1.PrintPage,AddressOfMe.PrintGraphics
- PrintDocument1.Print()
- CatchexAsException
- MsgBox(ex.Message)
- EndTry
- EndSub
-
- PrivateSubPrintGraphics(ByValsenderAsObject,ByValevAsSystem.Drawing.Printing.PrintPageEventArgs)
- ev.Graphics.DrawImage(System.Drawing.Image.FromFile(TextBox1.Text),ev.Graphics.VisibleClipBounds)
- ev.HasMorePages=False
- EndSub
- EndClass
二、打印文字(创建对象printdocument方法)
DimprintDocAsNewSystem.Drawing.Printing.PrintDocument
- AddHandlerprintDoc.PrintPage,AddressOfMe.PrintText
- printDoc.Print()
- CatchexAsException
- MsgBox(ex.Message)
- EndTry
-
- PrivateSubPrintText(ByValsenderAsObject,ByValevAsSystem.Drawing.Printing.PrintPageEventArgs)
- ev.Graphics.DrawString(TextBox1.Text,NewFont("Arial",11,FontStyle.Bold),Brushes.Black,40,40)
- ev.HasMorePages=False
- EndClass
上面两个方法都是简单的方法,但有重大的缺点: 1、字符串不会自动转行,也就是说过长的字符串会“打印”到页面的“外面”去; 2、只能打印一页。 下面来解决上面两个问题。 三、完美打印过长的字符串(占有几页) 描述:open按钮打开一个对话框,选择一个文件,并将文本反映到richtextbox上。同时激活print,再按,就执行打印。
ImportsSystem.IO
- ImportsSystem.Drawing.Printing
- PublicClassForm1
- PrivatePrintPageSettingsAsNewPageSettings
- PrivateStringToPrintAsString
- PrivatePrintFontAsNewFont("Arial",10)
- PrivateSubbtnOpen_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnOpen.Click
- DimFilePathAsString
- OpenFileDialog1.Filter="Textfiles(*.txt)|*.txt"
- OpenFileDialog1.ShowDialog()
- IfOpenFileDialog1.FileName<>""Then
- FilePath=OpenFileDialog1.FileName
- Try
- DimMyFileStreamAsNewFileStream(FilePath,FileMode.Open)
- RichTextBox1.LoadFile(MyFileStream,RichTextBoxStreamType.PlainText)
- MyFileStream.Close()
- StringToPrint=RichTextBox1.Text
- btnPrint.Enabled=True
- CatchexAsException
- MessageBox.Show(ex.Message)
- EndTry
- EndIf
- EndSub
- PrivateSubbtnPrint_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnPrint.Click
- Try
-
- PrintDocument1.DefaultPageSettings=PrintPageSettings
- '指定“打印”对话框的文档并显示
- StringToPrint=RichTextBox1.Text
- PrintDialog1.Document=PrintDocument1
- DimresultAsDialogResult=PrintDialog1.ShowDialog()
- Ifresult=DialogResult.OKThen
- PrintDocument1.Print()
- EndIf
- CatchexAsException
- MessageBox.Show(ex.Message)
- EndTry
- PrivateSubPrintDocument1_PrintPage(ByValsenderAsSystem.Object,ByValeAsSystem.Drawing.Printing.PrintPageEventArgs)HandlesPrintDocument1.PrintPage
- DimnumCharsAsInteger
- DimnumLinesAsInteger
- DimstringForPageAsString
- DimstrFormatAsNewStringFormat
-
- DimrectDrawAsNewRectangleF(e.MarginBounds.Left,e.MarginBounds.Top,e.MarginBounds.Width,e.MarginBounds.Height)
- '定义区域,来确定一个页面可容纳多少文本,并使文本高度少一行,以免文本被减短
- DimsizeMeasureAsNewSizeF(e.MarginBounds.Width,e.MarginBounds.Height-PrintFont.GetHeight(e.Graphics))
- '处理长字符串时,按单词进行断开(换行)
- strFormat.Trimming=StringTrimming.Word
- '用MeasureString计算出可容纳的字符串个数numChars和行数numLines
- e.Graphics.MeasureString(StringToPrint,PrintFont,sizeMeasure,strFormat,numChars,numLines)
- '计算出适应页面的字符串
- stringForPage=StringToPrint.Substring(0,numChars)
- '(逻辑上)在当前页打印字符串
- e.Graphics.DrawString(stringForPage,rectDraw,strFormat)
- '若还有需要打印的文本,则继续处理剩下的页面
- IfnumChars<StringToPrint.LengthThen
- '删除已经打印的字符串
- StringToPrint=StringToPrint.Substring(numChars)
- e.HasMorePages=True
- Else
- e.HasMorePages=False
- EndSub
- EndClass
开始读了N久没明白什么意思?看了一下午,再逐条进行调试才明白原来打印的原理是这样的:
1、首先Printdialog1打印对话框,只是设置选择哪个打印机,用哪种方式来打印(通过PrintDialog1.Document = PrintDocument1来进行关联),与具体打印的字符串无关。
2、关键:PrintPage事件发生在打印“当前”页面,也就是说打印3页,这个事件就会发生3次。每次可以通过此事件来设置页面内容(逻辑上)。这样就可以控制打印多页。
3、通过MeasureString来计算每页可容纳的字符串和行数,这样就很好的控制每页的具体字符串,循环这个方法计算剩下的字符进行每页设置并打印。
再增加两个按钮,一个页面设置,一个是页面预览,代码如下:
PrivateSubbtnSetup_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnSetup.Click
- Try
- PageSetupDialog1.PageSettings=PrintPageSettings
- PageSetupDialog1.ShowDialog()
- PrivateSubbtnPreview_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnPreview.Click
- Try
- StringToPrint=RichTextBox1.Text
- PrintPreviewDialog1.Document=PrintDocument1
- PrintPreviewDialog1.ShowDialog()
- EndSub
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|