在设计表格打印程序时,遇到需要根据列宽来限制此列的文字输出宽度的问题,参考经过一番试验成功解决,虽然觉得可能在算法上效率可能不高,但是总算解决了,特公布出来给需要的朋友参考。
特别说明,之前提供的代码比较麻烦,今天看了一篇文章( http://www.codeguru.com/forum/archive/index.php/t-190585.html )受益匪浅,特重新提供给需要的朋友。
重要函数: ev.Graphics.MeasureString(),是用来计算字符串图形下的尺寸的;详细使用方法请请参考微软msdn
Private
Function CutStr()
Function CutStr(ByVal ev As System.Drawing.Printing.PrintPageEventArgs, ByVal StringToPrint As String, ByVal Width As Single, ByVal PrintFont As Font) As String
Dim numChars As Integer '可容纳的字符数
Dim numLines As Integer ‘可容纳得行数
Dim stringForPage As String ’用于打印的字符串
Dim strFormat As New StringFormat() ‘字符串格式
Dim LayoutArea As New SizeF ’限定打印的区域大小
LayoutArea.Width = Width
LayoutArea.Height = PrintFont.Height ‘这里.Height指包括行间距的文字打印高度,size则不包括行间距
strFormat.Trimming = StringTrimming.Word ’设置为分词
'计算打印区域可以容纳的字符数和行数
ev.Graphics.MeasureString(StringToPrint, PrintFont, LayoutArea, strFormat, numChars, numLines)
'Compute string that will fit on a page
'计算容纳的字符串
stringForPage = StringToPrint.Substring(0, numChars)
Return stringForPage
End Function
Dim numChars As Integer '可容纳的字符数
Dim numLines As Integer ‘可容纳得行数
Dim stringForPage As String ’用于打印的字符串
Dim strFormat As New StringFormat() ‘字符串格式
Dim LayoutArea As New SizeF ’限定打印的区域大小
LayoutArea.Width = Width
LayoutArea.Height = PrintFont.Height ‘这里.Height指包括行间距的文字打印高度,size则不包括行间距
strFormat.Trimming = StringTrimming.Word ’设置为分词
'计算打印区域可以容纳的字符数和行数
ev.Graphics.MeasureString(StringToPrint, PrintFont, LayoutArea, strFormat, numChars, numLines)
'Compute string that will fit on a page
'计算容纳的字符串
stringForPage = StringToPrint.Substring(0, numChars)
Return stringForPage
End Function