名城大学理工学部 応用化学科 永田研究室
トップ 教育 研究 プロフィール アクセス リンク キャラクター ブログ
トップ  >  ブログ  >  AppleScript で docx ファイルを pdf に自動変換する

 

ブログ「天白で有機化学やってます。」 ブログ「天白で有機化学やってます。」
< ChemRxivにプレプリントを投稿した | ブログトップ | 「ひやっしー」に研究者はどう対応すべきか >

AppleScript で docx ファイルを pdf に自動変換する2024/06/07(金)

本学では、講義用の教材の配布や、レポートの提出のために、WebClass というシステムを使っています。このシステムは、だいぶ以前から導入されていたのですが、コロナ禍を機会に本格的に活用されるようになりました。レポートの採点・集計機能なども備えています。ただ、あまり機動性の高いシステムではなく、対話的な作業をするには力不足の感が強いので、私はもっぱら学生との間のファイル交換ツールとして使っています。

WebClass にレポートを提出してもらう時、「docx または pdf」を指定することがよくあります。オムニバス科目のレポート課題などで、あまりガチな内容ではないときは、手書きをスキャンして PDF 化する方が書きやすい場合もあるためです。そうすると、受け取ったファイルのリストはこんな様子になります。

これを採点するのは、なかなかに面倒な作業なのですね。紙のレポートだったら、学籍番号順に並べ替えて揃え、上から1枚ずつめくって点数をつけていけばよいのですが、100個近いファイルを PC 上で順番に開いて採点するのは、かなり大変です。マウスでファイルをダブルクリックして、開いたファイルを先頭から読む、という作業は、右手と視線の移動がいちいち大きく、そのたびに少しずつ集中力が削がれることになります。

そこで、docx ファイルを全部 PDF に変換して、かつ学籍番号順に並べ替えておいて、Digital Paper で採点することにしました。Digital Paper での採点は、自分のスタイルとして完全に確立していて、紙のレポートとさほど変わらない感覚で進めることができています。ファイル形式とファイル名だけなんとかすればよいのです。

そうなると、スクリプト言語の出番です。「docx ファイルを PDF に変換」というのが鬼門だなと思ったのですが、"AppleScript docx pdf" で検索すると、すぐに見つかりました:AppleScript - Save Microsoft Word DOC(X) Document to PDF。AppleScript 関連の情報は探しにくくて、いつも難儀します。Microsoft Word の AppleScript でこんなことができるなんて知らんかったよ。

というわけで、下のような bash スクリプトを書きました。WebClass で一括ダウンロードしたファイルは、"整理番号_学籍番号_ファイル名.拡張子"という形式になっています。最初の"整理番号_"という部分を削除すれば、学籍番号がファイル名の先頭に来ます。AppleScript の部分は、osascript コマンドと、bash のヒアドキュメントを使って記述します。

#!/bin/bash
#  docx を MSWord を使って pdf に変換
#  ついでに、WebClass 特有の "ddd_" という接頭辞を削除する

for i in *.pdf
do
  ipdf=${i#[0123456789][0123456789][0123456789]_}
  if [ "$ipdf" != "$i" ]; then
    mv "$i" "$ipdf"
    echo "Rename: " "$i" "->" "$ipdf"
  fi
done
for i in *.docx
do
  rp=`realpath "$i"`
  ipdf=${i%.docx}.pdf
  ipdf=${ipdf#[0123456789][0123456789][0123456789]_}
  rpdf=`realpath "$ipdf"`
  echo "Make PDF: " "$i" "->" "$ipdf"
  osascript <<EOF
  tell application id "com.microsoft.Word"
    activate
    set view type of view of active window to draft view
    open ("$rp" as POSIX file)
    set outputPath to ("$rpdf" as POSIX file)
    repeat while not (active document is not missing value)
      delay 0.5
    end repeat
    set activeDoc to active document
    save as activeDoc file name outputPath file format format PDF
    close active document saving no
  end tell
EOF
done

無事、学籍番号順の PDF になりました。

< ChemRxivにプレプリントを投稿した | ブログトップ | 「ひやっしー」に研究者はどう対応すべきか >