利用VBA实现word文档手写体打印

  • 一、缘起
  • 二、实现
    • 1、下载手写字体
    • 2、导入书写字体
    • 3、效果展示
    • 4、利用VBA优化
    • 5、优化后效果
  • 三、附件
    • 1、A4纸打印效果
    • 2、信纸打印效果
    • 3、完整代码

一、缘起

在日常工作中,经常遇到需要大量手写的时候,比如申请书、读后感、观后感,还有单位要求的其他需要手写的文档。作为信息技术人员,当然是能用计算机解决的,就绝不动手。下面就分享自己在打印体转手写体的一次实践。

二、实现

1、下载手写字体

字体网站很多(常用的 字体天下),可以去下载免费的手写字体

2、导入书写字体

大多数的系统字体都在这个路径:C:\Windows\Fonts,我们只需要把刚才下载的字体解压,然后放到这个路径就大功告成。

3、效果展示


有点手写的感觉了,但仔细看你会发现许多问题,比如字体都是一样大,并且每行都十分整齐,相邻两个字左右间距一致,然而我们手写的时候是做不到打印体这样 整齐的,所以需要继续优化。

4、利用VBA优化

需要实现三点,一、字体大小需要在一定范围内波动;二、行间距需要随机波动;三、左右字间距需要随机波动。代码如下:

Dim R_Character As Range
' 字体大小在下列值之间进行波动,改成需要的大小,重复出现的次数越多,相应出现的概率越大,最小精度0.5
Dim FontSize() As String
FontSize = Split("17.5,18.5,19.5,19,18", ",")
Dim FontName() As String
FontName = Split("陈静的字完整版,萌妹子体,李国夫手写体", ",")
'a数值越大,行距越大,波动范围a+x, x∈[-1~1]
a = 0
'b数值越大,字距越大,波动范围b+x, x∈[-1~1]
b = 0
'行间距 在一定以下值中均等分布,改成需要的大小,范围c+x, x∈[0~5]
c = 25
For Each R_Character In ActiveDocument.Characters
VBA.Randomize
' 数组长度
FontNameLength = UBound(FontName) - LBound(FontName)
FontSizeLength = UBound(FontSize) - LBound(FontSize)
' 字号大小
R_Character.Font.Size = FontSize(Int(VBA.Rnd * FontSizeLength) + 1)
' 字的上下偏移
R_Character.Font.Position = Choose(Int(VBA.Rnd * 5) + 1, -1, -0.5, 0, 0.5, 1) + a
' 字的左右间距
R_Character.Font.Spacing = Choose(Int(VBA.Rnd * 5) + 1, -1, -0.5, 0, 0.5, 1) + b

5、优化后效果

三、附件

1、A4纸打印效果

2、信纸打印效果

3、完整代码

Sub 字体修改()
' 字体修改 宏
Dim R_Character As Range
' 字体大小在下列值之间进行波动,改成需要的大小,重复出现的次数越多,相应出现的概率越大,最小精度0.5
Dim FontSize() As String
FontSize = Split("17.5,18.5,19.5,19,18", ",")
'字体名称在下列字体之间进行波动,改成需要的字体,但需要保证系统拥有下列字体,可以在word查看字体名字
Dim FontName() As String
FontName = Split("陈静的字完整版,萌妹子体,李国夫手写体", ",")
' 推荐字体
' "萌妹子体,张维镜手写楷书,萌妹子体,汉仪晨妹子W,小豆岛风物诗简繁,小豆岛秋日和简繁"
'a数值越大,行距越大,波动范围a+x, x∈[-1~1]
a = 0
'b数值越大,字距越大,波动范围b+x, x∈[-1~1]
b = 0
'行间距 在一定以下值中均等分布,改成需要的大小,范围c+x, x∈[0~5]
c = 25
For Each R_Character In ActiveDocument.Characters
VBA.Randomize
' 数组长度
FontNameLength = UBound(FontName) - LBound(FontName)
FontSizeLength = UBound(FontSize) - LBound(FontSize)
' 字号大小
R_Character.Font.Size = FontSize(Int(VBA.Rnd * FontSizeLength) + 1)
' 字的上下偏移
R_Character.Font.Position = Choose(Int(VBA.Rnd * 5) + 1, -1, -0.5, 0, 0.5, 1) + a
' 字的左右间距
R_Character.Font.Spacing = Choose(Int(VBA.Rnd * 5) + 1, -1, -0.5, 0, 0.5, 1) + b
If R_Character = "。" Or R_Character = "," Or R_Character = "," Or R_Character = ";" Or R_Character = "’" Or R_Character = "‘" Or R_Character = "“" Or R_Character = "”" Or R_Character = "!" Or R_Character = "?" Or R_Character = "、" Or R_Character = ":" Then
' 中文常用标点符号
' 标点固定用以下字体
R_Character.Font.Name = "李国夫手写体"
' 标点随机用FontName中字体
'R_Character.Font.Name = FontName(Int(VBA.Rnd * FontSizeLength))
ElseIf Asc(R_Character) >= 48 And Asc(R_Character) <= 57 Then
' 数字
R_Character.Font.Name = "陈静的字完整版"
ElseIf Asc(R_Character) >= 97 And Asc(R_Character) <= 122 Or Asc(R_Character) >= 65 And Asc(R_Character) <= 90 Or R_Character = "." Or R_Character = "(" Or R_Character = ")" Or R_Character = "(" Or R_Character = ")" Then
' 大小写字母
R_Character.Font.Name = "陈静的字完整版"
End If
Next
For Each Cur_Paragraph In ActiveDocument.Paragraphs
' 设置行间距类型为固定值
Cur_Paragraph.LineSpacingRule = wdLineSpaceExactly
' 设置行间距的值
Cur_Paragraph.LineSpacing = Int(VBA.Rnd * 5) + 1 + c
Next
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "“"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "”"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Application.ScreenUpdating = True
End Sub

利用VBA实现word文档手写体打印相关推荐

  1. VBA读取html表格内容,科学网—VBA读取word文档表格中table的cell的text文本 - 付安民的博文...

    VBA读取word文档表格中table的cell的text文本 已有 11546 次阅读 2010-6-4 16:40 |个人分类:学习篇|系统分类:科研笔记 Sub Readtable() Dim ...

  2. wps文件一点打印就关闭打印机服务器,word打印闪退 word文档一打印就闪退

    是的打印机设置问题,可能是某个打印机服务没有打开当添加打印机或是使用打印机时,系统报错"打印后台程序服务没有运行",一般会发生在 Windows 2000.XP.2003 系统下, ...

  3. matlab 生成 word 表格,利用MATLAB生成Word文档.doc

    利用MATLAB生成Word文档 function ceshi_Word %利用MATLAB生成Word文档 % ceshi_Word % % Copyright 2009 - 2010 xiezhh ...

  4. java利用POI替换word文档中的标签

    java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  5. 计算机文档不能直接打印,word文档不能打印的处理方法

    word文档不能打印的处理方法 在使用打印机时,发现没有响应,此时的`你是否十分着急,下面小编教你怎么解决吧. Word打印无反应的解决步骤: 第一步:检查是否安装了打印机; 1.单击"开始 ...

  6. Python3-word文档操作(三):利用python修改word文档的内容

    前两篇博文中,学习了是用python的docx库创建一个word文档,并且编辑了标题和正文,以及利用python来获取word文档的内容.本篇学习利用python修改word文档的内容. 修改word ...

  7. 在word文档中打印大号字

    在word文档中打印大号字   设置之前可以先将页面设置为横向.文件à页面设置à横向 一 .使用快捷键操作字体(比较简单实用) 按快捷键 'Ctrl'+'Shift'+'>' 可以将所选择的文字 ...

  8. matlab2015 word,利用MATLAB生成Word文档

    <利用MATLAB生成Word文档>由会员分享,可在线阅读,更多相关<利用MATLAB生成Word文档(5页珍藏版)>请在人人文库网上搜索. 1.function ceshi_ ...

  9. 利用OpenOffice实现word文档在线预览

    项目中遇到的word文档在线预览需求,查阅很多资料决定利用openoffice转换word文档为pdf/html进行预览实现. 1.下载openoffice4安装 www.openoffice.org ...

最新文章

  1. InfoQ播客: Shuman Ghosemajumder谈安全和网络犯罪
  2. poj2955 Brackets 最大括号匹配 区间动态规划
  3. Gourmet Cat
  4. 使用 inline 内联函数对抗逆向分析
  5. Java基础之正则表达式
  6. java实现相同分数排名_java做成绩排名表,如何实现同分同名次
  7. 云计算作业001-电脑配置
  8. Gson格式转换Integer变为Double类型问题解决
  9. 树莓派之启用root密码
  10. python字符串比较大小的规则_Python的变量和数据类型,学会只要3分钟
  11. 【CPLEX】Java调用CPLEX的一些小笔记
  12. dell 2u服务器型号,IBM、HP、Dell比拼主流2U双路服务器
  13. plsql删除历史记录(重新打开文件)
  14. win10系统下,数据库密码忘记
  15. 调查问卷生成json字符串
  16. 逻辑推理之赵钱孙李周
  17. 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)
  18. 【学习日记】opencv for vscode 的标准模板---记录
  19. maple 2018 窗口关闭提示乱码_GRF中野再次实锤加盟LNG!韩媒爆料:Maple或去北美赛区养老...
  20. CPU性能由主频决定吗?

热门文章

  1. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)
  2. 【Three.js基础】创建场景、渲染场景、创建轨道控制器(一)
  3. 【网络安全学习】(一)中华人民共和国网络安全法
  4. 8.二叉树的下一个节点(待填坑)
  5. 网络层协议介绍 三次握手四次断开
  6. 微信的成功,坚信美好偏执狂的回馈(有追求的人必修课)
  7. 使用ffmpeg将DVD转MP4
  8. 【日语】标日初级上册单词(13-16)1
  9. 细说嵌入式教程的坑——小白学ARM(三)
  10. c266 设置邮箱_柯美C226-广东柯美-柯美C226 扫描到u盘设置