はじめに
この記事を読むとできること
macOSのコマンド一行で、Microsoft Office書類をPDFに変換できるようになります
- Microsoft Officeは不要です
- フォルダ下のすべての書類をまとめて変換できます
- VBスクリプトと比べてかなり速いです(約3.5倍)
コードを書くにいたった背景
Office書類を受け取るものの、編集したいわけでなく、印刷したりiPadでメモしながら読むためにPDFに変換したいことが頻繁にあります。
付録に記したようにこれまでもいろいろ試行錯誤して効率化をはかってきましたが、「macOSで動くスクリプトでなんとかならないものか」とおもいました。
Windows + Pythonだと、pywin32
モジュールをつかってwin32com
を動かす方法があるのですが、macOSではその手は使えません。あきらめずに調べていると、オープンソースのLibreOfficeをつかう方法があるとのこと。
試してみると、思いのほかすごく良いし速いので、ご紹介いたします。
動きの概要
LibreOfficeさえインストールすれば、macOSのターミナルからコマンド一発です。
find . \( -name '*.doc*' -o -name '*.xls*' -o -name '*.ppt*' \) -print0 \
| xargs -0 /Applications/LibreOffice.app/Contents/MacOS/soffice \
--headless --convert-to pdf
実行時間は、4フォルダ・21ファイル(合計9.6MB)を変換した場合で26秒でした。おなじものをVBスクリプトで変換すると90秒でしたので、3倍以上速くなっています。めちゃハッピーです。
詳細
LibreOfficeのインストール
からダウンロードしてインストールします。

バージョンは7.2.5にしましたが、安定版の7.1.8でいいとおもいます。
フォントのコピー
たとえばMS 明朝
がmacOSにインストールされていないと、別のフォントに置き換わってしまいます。必要なフォントをコピーします。C:\Windows\Fonts\
下にあります。
コマンドの実行
terminalを起動し、Officeが入っているフォルダに行きます。

コマンドを実行します。
find . \( -name '*.doc*' -o -name '*.xls*' -o -name '*.ppt*' \) -print0 \
| xargs -0 /Applications/LibreOffice.app/Contents/MacOS/soffice \
--headless --convert-to pdf
コマンドを実行したディレクトリに、変換済みPDFが保存されています。

すこしコマンドの補足をします。
find . \( -name '*.doc*' -o -name '*.xls*' -o -name '*.ppt*' \) -print0
( -name ... )
で、拡張子がdoc/docx/xls/xlsx/ppt/pptx
であるファイルを拾っています。-print0
は、ファイル名に空白が含まれている場合の対策です。
xargs -0 /Applications/LibreOffice.app/Contents/MacOS/soffice \
--headless --convert-to pdf
xargs -0
は、さきほどのfind -print0
とセットで使っています(ファイル名に空白が含まれていても動くようにしている)。/Applications/LibreOffice.app/Contents/MacOS/soffice
でLibreOfficeを実行しています。--headless
でLibreOfficeを画面表示なしで起動しています。--convert-to pdf
でPDFに変換するよう指示しています。
スクリプト化
コマンドでも便利ですが、さらにラクをするために、スクリプトを書きます。ファイル名はoff2pdf.command
などと、拡張子を.command
にします(デフォルトアプリがterminalになります)。
# !/bin/bash
CURRENT=$(cd $(dirname $0);pwd)
cd $CURRENT
time find . \( -name '*.doc*' -o -name '*.xls*' -o -name '*.ppt*' \) -print0 | xargs -0 /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf
さらに、
$ chmod u+x off2pdf.command
として、スクリプトファイルに実行権限を付与します。
このスクリプトを、Office書類が入ったフォルダに移動し、Finderでスクリプトをダブルクリックすると、terminalが起動し、変換がはじまります。

おわりに
参考リンク
LibreOfficeの使用について:
【Python】Excel を PDF に変換する(Alpine Linux + LibreOffice ) - 7839
フォントのコピーについて:
フォントデータを移行する方法【Windows10】 | 石川パソコン修理センター
find
およびxargs
コマンドについて:
find-xargs-grepで特定文字列を含むファイルの検索 - OpenGroove
findとxargsコマンドで-print0オプションを使う理由(改) - Qiita
環境
ここで書いていることは、下記のバージョンで実施しました。
- LibreOffice 7.2.5
- macOS Monterey 12.1
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)
これまでに試してきたこと
step 1: クイックアクセスツールバー
macOS版のOfficeもありますが、Windows版とやはり微妙にちがうので、Parallels上でOfficeを動かしています。ファイル > 保存と送信 > PDF/XPSドキュメントの作成
という操作はいかにもめんどうなので、クイックアクセスツールバーにPDFまたはXPS形式で発行
ボタンを追加しました。これで、ちょっとはラクになりました。
step 2: VBスクリプト
クイックアクセスツールバーからワンクリックでずいぶんラクになりましたが、20ファイルとかやると嫌になってきます。そこで下記のサイトを参考にして、VBスクリプトを作成して変換していました。
VBSでExcel、Word、PowerPointを一括でPDFに変換してみる | ドラブロ
わりといい感じだったので、2年ほどはこれで満足していたのですが
- まあまあ遅い(Parallels経由だからかもしれない)
- Windowsのメジャーアップデートのたびに起動しなくなる
- 途中でキャンセルできない
など微妙なところが気になってきていました。
MS Officeを完全停止することはむずかしいと思いますが(最後はそれが正
なので)、ほとんどのケースではmacOS上で完結させられそうで、とてもしあわせです。