python-docxを使う(その3)フォントの指定
文書全体で変えたいとき
意識に上ることはあまりないが、MS Wordは、LaTeXのクラスファイルと同じようなファイルで文書のフォーマットを管理しており、スタイルと呼ばれるらしい。多分、スタイルに関する情報も文書ファイル中に埋め込まれているのだと思う。
何も指定しないと英語名称のNormalというスタイルが使われる。日本語名称は「標準」だったと思う。
文書全体で変えたいときは使っているスタイルをカスタマイズする。例えば、游明朝を本文のフォントに使いたい場合
from docx import Documentfrom docx.oxml.ns import qn
という準備の後に
document = Document()style = document.styles['Normal']style.font.name = 'Times New Roman'style.element.rPr.rFonts.set(qn('w:eastAsia'), '游明朝')
という具合にする。新規のオブジェクトを作った後に、style.font.nameで何らかの英文フォントを先に指定して、その後、日本語のフォントを指定しないといけない点がポイント。
ただ、こうすると、上の例では半角文字ではTimes New Romanを使う。半角文字も游明朝にしたい場合、最後の行の後で
style.font.name = '游明朝'
と、style.font.nameを再定義すると、使えるようになる。
参考にしたのは
http://www.jhanmath.com/?p=130
というサイト。中国語のサイトだが、言いたいことは大体伝わる。同じ苦労をしているのだろうと想像される。
文書の一部で変えたいとき
以下のようにしたら動いた。
準備として
from docx.oxml.ns import qn
と、qnなるものをimportしておき
paragraph = document.add_paragraph()
pw = paragraph.add_run('あいうえお')
pw.font.name = '游ゴシック Medium'
pw._element.rPr.rFonts.set(qn('w:eastAsia'), pw.font.name)
という具合にすると、add_runで追加した文字のフォントを変えられた。