python docx 中文字体设置

前段时间用到了docx生成word文档,docx本身用起来很方便,自带的各种样式都很好看,美中不足的就是对中文的支持不够好。在未设置中文字体的时候,生成的文档虽然可以显示中文,但是笔画大小不一,很难看。

笔者在网上搜寻一番,结合docx的官方文档,总结了一下docx设置中文字体的经验。

 

首先创建一个文档,要先声明一个document

from docx import Document

document = Document()

docx内置的样式都可以通过document.styles取到。

正文是Normal, 标题样式根据标题声明的基本,分别从Heading 1 到Heading 9, 另外还有table、list等各种word对应的样式。可以通过遍历document.styles查看。

我们以正文Normal为例。先来看看涉及字体更改的是style object里面的哪些属性。

1. document.styles['Normal'].font.name

有兴趣深入研究的同学可以看看官方文档对Font的介绍http://python-docx.readthedocs.io/en/latest/dev/analysis/features/text/font.html?highlight=font。 在这里我们只需要更改font.name

2. document.styles['Normal']._element.rPr.rFonts

只更改font.name是不够的,还需要调用._element.rPr.rFontsset()方法。

综合起来这样

from docx.oxml.ns import qn

document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

 

是不是很简单?直接更改内置Style可以说是牵一发而动全身,如果只需要更一部分怎么办呢,下面我们以表格为例。

先创建一个表格,这里选用了TableGrid这个Style

table = document.add_table(rows=2, cols=2), style="TableGrid")

然后可以通过table.style获取到这个表格的style对象。

然后直接更改font.name就可以啦

table.style.font.name = u'宋体'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值