LoginSignup
1
6

More than 1 year has passed since last update.

Office書類をPDFに変換するワンライナー(macOS)

Last updated at Posted at 2022-01-25

はじめに

この記事を読むとできること

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になります)。

off2pdf.command
#!/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形式で発行ボタンを追加しました。これで、ちょっとはラクになりました。

SS 2022-01-25 23.04.26.png

step 2: VBスクリプト

クイックアクセスツールバーからワンクリックでずいぶんラクになりましたが、20ファイルとかやると嫌になってきます。そこで下記のサイトを参考にして、VBスクリプトを作成して変換していました。

VBSでExcel、Word、PowerPointを一括でPDFに変換してみる | ドラブロ

わりといい感じだったので、2年ほどはこれで満足していたのですが

  • まあまあ遅い(Parallels経由だからかもしれない)
  • Windowsのメジャーアップデートのたびに起動しなくなる
  • 途中でキャンセルできない

など微妙なところが気になってきていました。

MS Officeを完全停止することはむずかしいと思いますが(最後はそれがなので)、ほとんどのケースではmacOS上で完結させられそうで、とてもしあわせです。

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6