打印控件定宽截取字符串问题

gukuang78 2010-03-24 11:15:35
问题:
在A4纸上打印一篇中英文混合字符文章,要求每行打印18厘米的宽度,那么,如何快速在这篇文章中截取合适长度的字符串?
如果不使用left或mid循环取字串进行TextWidth判断的话,有什么好的方法,或者有优化算法也可以。
谢谢各位,请不吝赐教。
...全文
104 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2010-03-26
  • 打赏
  • 举报
回复
整篇文章可以从前向后分段取....
vbman2003 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gukuang78 的回复:]
如果这个字符串很大的话,那效率不是很高,有什么提高效率的方法啊?
快来啊,高手们……
[/Quote]

如果你要拆分整篇文章,直接用那个函数当然效率不行,那只是一个方法的思路...取适当长度的字符串分段处理就可以了吧...

vbman2003 2010-03-25
  • 打赏
  • 举报
回复
测试:

Option Explicit

Function GetPrinterString(ByVal pStr As String, pLength As Long, _
Optional pFontName As String = "宋体", Optional pFontSize As Long = 12 _
) As String

Dim sLen As Long

sLen = Len(pStr)
Printer.FontName = pFontName
Printer.FontSize = pFontSize
While Printer.TextWidth(pStr) > pLength
pStr = Mid(pStr, 1, sLen - 1)
sLen = sLen - 1
Wend
GetPrinterString = pStr

End Function

Private Sub Command1_Click()

Dim s As String

s = "ABCDefwefwefwefwef"
Debug.Print GetPrinterString(s, 5000, pFontSize:=38)
Debug.Print GetPrinterString(s, 5000, pFontSize:=28)

s = "恰似一江春水向东流"
Debug.Print GetPrinterString(s, 5000, pFontSize:=38)
Debug.Print GetPrinterString(s, 5000, pFontSize:=28)

s = "abc一江春22水向33东流"
Debug.Print GetPrinterString(s, 5000, pFontSize:=38)
Debug.Print GetPrinterString(s, 5000, pFontSize:=28)

End Sub
lyserver 2010-03-25
  • 打赏
  • 举报
回复
使用DrawText函数,可以按指定矩形截取。
vbman2003 2010-03-25
  • 打赏
  • 举报
回复
打印时字体和其大小都会不一样,我觉得用TextWidth+mid判断截取比较好....
Tiger_Zhao 2010-03-25
  • 打赏
  • 举报
回复
如果用中文字体,1个中文字符宽度 = 2个英文字符宽度;
预先算好18厘米能打多少个英文字符数 n;
逐个字符判断中英文,中文字符累加2、英文字符累加1,一直到最接近 n,打印、换行,重新累加。
ggblair 2010-03-25
  • 打赏
  • 举报
回复
upupupupup
贝隆 2010-03-25
  • 打赏
  • 举报
回复
如果要求不高,可以事先做好Excel模板,然后把这些内容存入Excel,再打印Excel即可。
gukuang78 2010-03-25
  • 打赏
  • 举报
回复
如果这个字符串很大的话,那效率不是很高,有什么提高效率的方法啊?
快来啊,高手们……
gukuang78 2010-03-25
  • 打赏
  • 举报
回复
谢谢各位,顶一下先。再多来几个朋友指教指教。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧