はじめまして、営業部の斎藤です。
営業部内ではシステム寄りの案件を担当することが多いです。
さて、印刷会社の営業職を悩ませるものに、
Officeファイルがあります。
MicrosoftはOfficeファイルの”見た目の”絶対性より、
(自社製品群内の)様々な環境で、とりあえずデータを開いて扱えること(可搬性)を重視しています。そのためかフォントが不足していても気に留めてはくれません。
弊社は、お客さまの希望どおりに制作・印刷することを大切にしています。
頂いたWordファイルに使われているフォントが弊社に無い場合、
印刷物の見た目が変わってしまうため大問題です。
不足するフォントは、以下の手順で調べています。
いや、、、あらためて、これわけわからん。
特に【詳細設定】からフォントを調べる流れが、つながりません。
なんかこう、もっと手軽にできないだろうか、と思うのです。
1つ2つのチェックならよいのですが、
大量のwordファイルをチェックすることもあり、
スクリプトを自作して省力化したいと思っていました。
しかし、公式のdocxファイル仕様書は、
仕事の片手間で読みこなすには厳しい内容です。
そこで今回は、先人の知恵をお借りして、
pythonとpython-docxライブラリで楽をしようと思います。
(以下のサイトを参考にさせてもらいました。)
技術メモ集ーPythonでword,docxファイルを操作・置換する(python-docx)
Python-docx公式ドキュメント
公式ドキュメントは、前半のチュートリアルが冗長なので、後半のAPI解説から読むほうがわかりやすかったです。
python-docxで読み込んだWordファイルは、以下のような構造になります。
読み込んだファイル自体を示すDocumentから、
Paragraph(段落)、Table(表組み)のリストを取得でき、
ParagraphからはRun(同じ書式の文字の並び)を取得できます。
Documentから順に総当たりでRunをたどり、
フォント情報を参照すれば楽勝そうですね。
(ヘッダー/フッダー、Wordアートに含まれる
フォントが取得できなさそうですが、目をつぶりましょう!;))
さくっとスクリプト(プログラム)を書いて実行します。
あれれ、『None: font名が無い』の連発です。
ドキュメントを読み返すと、チュートリアルに書かれていました。
フォント情報は、テーマに設定されたフォントがそのまま使われている場合、None(無い)とされます。
そのテーマで設定されているフォント情報を調べようにも、Word標準テーマの場合は、
python-docからは情報を参照できないようです。
おそらくdocxがどんな環境(MacやLinux)で扱われるか判らないための、意図的な設計なのでしょう(工学的には間違っていないと思います)。
また、ユーザが作成した埋め込みテーマでは、フォント名にアクセスできるものの、アジア圏のフォントが考慮されていないようでした。
python-docxだけで、完全にフォントを調べるのは難しそうですね。
(長々と書いたのにゴメンナサイ)
ですがpython-docxを糸口にして、
docxファイルの仕様に踏み込んでいける気がします。
日をあらためて、再挑戦したいです。
以上のようにガバガバな内容ですが、スクリプトを掲載しておきます。
テーマで設定されている書体名は取得できません。
また、ヘッダー/フッター、図形に含まれる書体名も取得できません。
こちらより実行ファイルをダウンロードしてください。
docxファイルをドロップして実行します。
(一度に複数のファイルをドロップできます)
https://www.gentie.com/download/checkdocxfonts.zip
下記スクリプトを保存し、
python [保存したスクリプト名] <<チェック対象のファイル名>> で実行してください。
ワイルドカードで、複数のファイルを渡しても実行できます。