python设置中文字体_python-docx设置中文字体

在python-docx包中对WORD文档字体的设置要使用font类,只需要更改font.name属性就可以了。然而,对于中文字体的设置远不是这么简单。

01一般情况下的字体设置

代码如下

from docx import Document # 导入包document = Document() # 新建一个paragraph1 = document.add_paragraph()run = paragraph1.add_run('aBCDefg这是中文')font = run.fontfont.name = '宋体'document.save('test.docx')运行后test.docx效果为:

42166d224f4a20a4c1dfe767d999e424700ed09b.jpeg?token=de112bf473646a204033c3f3ddf6ed4e字体设置的一般方式

这种形式设置字体是设置字体的一般方法,只对西文字体有效,对中文字体无效。

02解决方案

为了解决中文字体设置无效的问题,有的网友提出方案

from docx import Document # 导入docx包from docx.oxml.ns import qndocument.styles['Normal'].font.name = u'宋体'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 将段落中的所有字体paragraph1 = document.add_paragraph() # 添加一个段落run = paragraph1.add_run(u'aBCDefg这是中文') # 段落内增加内容1document.save('test.docx') # 存储文件效果为:

a8ec8a13632762d0a99f99ebea2774fc503dc616.jpeg?token=d3765e6d6694551e83c1345d45dfa51f解决方案运行效果

使用了python-docx包中的样式,借助样式中的字符类型"eastAsia",将字符设置中文字体,宋体。代码中更改了“Normal”样式,确实是将段落的输入的内容设置成了“宋体”,但是,存在以下不足:

由于修改了全局样式“Normal”,所以将所有的中文字符都设置成了宋体,不能设置其他的中文字体,如:楷体等。由于对全局的中文字体起作用,如果要将段落内的个别中文字设置“宋体”则无法实现。

03改进的方案

为此,笔者将代码做如下修改:

from docx import Document # 导入Documentfrom docx.oxml.ns import qn # 导入qnfrom docx.enum.style import WD_STYLE_TYPEdocument = Document() # 新建word文档style_song = document.styles.add_style('Song', WD_STYLE_TYPE.CHARACTER)style_song.font.name = '宋体'document.styles['Song']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')paragraph1 = document.add_paragraph() # 添加新段落run = paragraph1.add_run(u'aBCDefg这是中文', style='Song')font = run.font # 获取字符的字体font.name = 'Cambira'run = paragraph1.add_run(u'aBCDefg这是中文') # 第一个段落内增加内容document.save('test.docx') # 存储WORD文档运行后docx文件效果为:

9358d109b3de9c827667f767254afc0c18d8432d.jpeg?token=c413cc95d18b868415df14314d951dae改进方案前段字的设置效果

203fb80e7bec54e7f166dcb9f3f3e7564dc26ae5.jpeg?token=24f2fe6d6e3b16bc2834b8bc2e89b355改进方案后段字的设置效果

前段的字符,英文字符字体设置成了'Cambira',中文字符的字体设置了宋体。后段的字体为默认字体。实现了对段落中的任意字符设置成中文。

04再次改进的方案

当然如果还要实现在段落中有些中文字符设置“楷体”,“隶书”等多种字体,还需要对以上程序进行完善。

document = Document() # 新建docx文档style_song = document.styles.add_style('Song', WD_STYLE_TYPE.CHARACTER) # 设置Song字样式style_song.font.name = '宋体'document.styles['Song']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 将段落中的所有字体style_song = document.styles.add_style('Kai', WD_STYLE_TYPE.CHARACTER)style_song.font.name = '楷体'document.styles['Kai']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体') # 将段落中的所有字体style_song = document.styles.add_style('Lishu', WD_STYLE_TYPE.CHARACTER)style_song.font.name = '隶书'document.styles['Lishu']._element.rPr.rFonts.set(qn('w:eastAsia'), u'隶书') # 将段落中的所有字体paragraph1 = document.add_paragraph() # 添加段落run = paragraph1.add_run(u'aBCDefg这是中文', style='Song') # 设置宋体样式font = run.font #设置字体font.name = 'Cambira' # 设置西文字体paragraph1.add_run(u'aBCDefg这是中文', style='Kai').font.name = 'Cambira'paragraph1.add_run(u'aBCDefg这是中文', style='Lishu').font.name = 'Cambira'运行后效果为:

58ee3d6d55fbb2fbdf86b97605815ca24723dc73.jpeg?token=799613b3b7f24e0ff769cce8589fccb4再次改进方案前段效果

d31b0ef41bd5ad6ea7ccc616c80045ddb7fd3c62.jpeg?token=4868ef1d94680caeb0f0fb3fa194d107再次改进方案中段效果

55e736d12f2eb9389b52f2819fa9f933e4dd6fd3.jpeg?token=c4fea4b0a87e3c54f1018132db892fb6再次改进方案后段效果

文档中的文字分成前、中、后等三段,前段中的英文和中文的字体分别是'Cambira'和“宋体”,中段为'Cambira'和“楷体”,后段为'Cambira'和“隶书”。实现了对段落中的任意字符设置成任意中文字体,至此可以愉快地使用python-docx包设置中文字体了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值