パスワードで保護されたPDFをメタデータからリネーム(Mac)

10/6 追記
id:kitoneに教えてもらった方法です。
qiita.com
自分の環境では未検証ですが、確かにこれでいけそう。

  • -

自分用のメモです。もっとスマートなやり方あったら誰か教えていただけると嬉しいです。

やりたいこと

日経BP記事検索サービス*1からダウンロードしたPDFファイルをそれぞれのPDFのメタデータ情報から一括でリネームする。
f:id:otani0083:20171005081834p:plain
ダウンロードした時のファイル名です。ファイル名を見ても内容が分かりません。
f:id:otani0083:20171005082031p:plain
それぞれPDFにはきちんとメタデータが埋め込まれています。メタデータのタイトルと作成者からを利用してPDFファイルをリネームすることです。

作業手順

AutomatorPythonを使います。

  1. Mac標準アプリのAutomatorメタデータを抽出。
  2. Automatorの新規文書、Workflowの作成から、フォルダの指定、フォルダの中身を取得、PDFのメタデータを取得、テキストファイルに書き出しを組み合わせ。
  3. 以下のようなテキストファイルが出来るのでPDFと同一フォルダに保存。
  4. テキストファイルのメタデータを元にPythonを使ってPDFをリネーム。

スクリプト

import os
files = os.listdir('./')#現在のフォルダに含まれているファイル名一覧を取得
file_name={}
with open ("****.txt") as f:#Automatorで出力したファイルを指定
    for i,v in enumerate(f.readlines()):#行数とファイル名を出力
        x=i%3
        if x== 0:
            key=v.strip()#現在のファイル名をキーに
        elif x==1:
            try:
                value=v.strip().split('\t')[0]+"_"+v.strip().split('\t')[1].replace("日経BP社 ","")#メタデータから抽出したタイトルと作成者情報を値に。
            except:
                pass#データ区切りの改行はスキップ
        else:
            file_name[key]=value

for i in files:#現在のフォルダにあるファイル一覧をループで全件処理
    try:
        os.rename('./'+i,'./'+file_name[i]+'.pdf')#現行ファイル名をもとに、ファイル名を値に変更
    except:
        pass#変換対象ではないデータの場合はスキップ

実行結果

f:id:otani0083:20171006103319p:plain

雑感

AutomatorPython2つ使う必要があるので、出来れば一本にまとめたいところです。
雑誌毎に微妙にメタデータの書き方が違うので、それを考慮するともうちょっと分かりやすいファイル名に出来ますが、とりあえずの目的は達成ということで。

作業手順1
f:id:otani0083:20171005082425p:plain
作業手順2・3
f:id:otani0083:20171005082609p:plain

*1:某大学で非常勤講師をやる最大のメリットは図書館及びその電子リソースが使えることだなぁと。大宅壮一東洋経済日経BPとかなり充実しているので