めもらんだむ

個人的な備忘録。Pythonに関することが中心になると思われます。

python-docxを使う(その3)フォントの指定

文書全体で変えたいとき

意識に上ることはあまりないが、MS Wordは、LaTeXのクラスファイルと同じようなファイルで文書のフォーマットを管理しており、スタイルと呼ばれるらしい。多分、スタイルに関する情報も文書ファイル中に埋め込まれているのだと思う。

何も指定しないと英語名称のNormalというスタイルが使われる。日本語名称は「標準」だったと思う。

文書全体で変えたいときは使っているスタイルをカスタマイズする。例えば、游明朝を本文のフォントに使いたい場合

from docx import Document
from 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で追加した文字のフォントを変えられた。

python-docxを使う(その2)紙のサイズとマージンの指定

MS Wordのデフォルトの紙のサイズはいわゆるレターサイズなので、これをA4サイズに変更する方法。

ついでにマージンの指定の仕方も。

from docx.shared import Mm

document = Document()
section = document.sections[0]
section.page_height = Mm(297)
section.page_width = Mm(210)
section.left_margin = Mm(25.4)
section.right_margin = Mm(25.4)
section.top_margin = Mm(25.4)
section.bottom_margin = Mm(25.4)
section.header_distance = Mm(12.7)
section.footer_distance = Mm(12.7)

stackoverflow.com

python-docx: PythonからMS Wordファイルを操作する

PythonからMS Wordファイルを操作するためのライブラリの一つにpython-docxがある。

ドキュメント:

python-docx — python-docx 0.8.11 documentation

GitHubから入手可能:

github.com

このライブラリから派生したものがいくつもあり、独自の追加機能が施されているものもあると思われるが、数が多いので詳細は不明。

python-docxは2022年9月現在で14ヶ月ほど更新がないので、それほど機能の追加は望めない雰囲気だが、枯れているとも言える。Pythonのバージョンアップに伴う機能変更と齟齬を来さないかはちょっと心配。

pipの使い方に関するメモ

  • pip list
    • インストールしているパッケージリストの表示
  • pip list -o
    • アップデートが出ているパッケージリストの表示:oはoutdatedのo
  • pip install 【パッケージ名】
    • パッケージのインストール
  • pip install -U 【パッケージ名】
    • パッケージのアップデート

参考:

qiita.com

 

pip-reviewというパッケージを入れておくと、outdatedのパッケージを一括更新できるようになる。

参考:

zenn.dev