諸事情で全社員に届け出住所を確認してもらう必要が生じました。
普段はGoogle Apps Scriptを利用してメールの差し込み配信をしているのですが、住所をメール本文ベタ打ちで送るのはいかがなものかという話に。そこで、住所を記載したPDFにパスワードをかけて、各人に送付することにしました。
パスワードは各人で異なります。
あらかじめ、ファイル名、住所、パスワードを記載したExcelファイルを用意しておきます。中身は下表のような内容です。
氏名 | ファイル名 | 住所 | パスワード |
---|---|---|---|
富田鈴花 | tomita | 神奈川県○○市 | suzuka |
松田好花 | matsuda | 京都府○○市 | konoka |
金村美玖 | kanemura | 埼玉県○○市 | miku |
パス付きpdfを作成するコードをPythonで書いて行きます。
最初に必要なモジュールを読み込み。
import os
import glob
import xlrd
import reportlab
from reportlab.pdfgen import canvas
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
import PyPDF2
準備したExcelファイルを読み込みます。
setting_sheet = xlrd.open_workbook(r'C:\hogehoge\settings.xlsx').sheet_by_name('Sheet1')
max_row = setting_sheet.nrows
ファイルの中身をリストに格納していきます。
name = []
address = []
password = []
for i in range(max_row):
name.append(setting_sheet.cell_value(i,1))
address.append(setting_sheet.cell_value(i,2))
password.append(setting_sheet.cell_value(i,3))
作業に使うフォルダを指定。pyファイルが入っているフォルダの下に「pdf」を作っておいたので、そこにパスワード無しのpdfファイルを保存する形をとります。
target_folder = os.getcwd() + r'\pdf'
住所は日本語なので、日本語を扱えるフォント(Meiryo UI)を読み込んでおきます。
registerFont(TTFont('meiryo',r'c:\windows\fonts\meiryo.ttc'))
ひとまずパスワードがかかっていないpdfファイルを作成します。
for j in range(1,max_row):
generated_pdf = target_folder + '\\' + name[j] + '.pdf'
pdffile = canvas.Canvas(generated_pdf)
pdffile.saveState()
pdffile.setFont('meiryo', 20)
pdffile.drawString(100, 800, address[j])
pdffile.save()
PyPDF2を使って作成済みpdfファイルにパスワードをかけ、別ファイルとしてexportフォルダに保存します。
src_pdf = PyPDF2.PdfFileReader(generated_pdf)
dst_pdf = PyPDF2.PdfFileWriter()
dst_pdf.cloneReaderDocumentRoot(src_pdf)
dst_pdf.encrypt(password[j])
export_file = target_folder + '\\export\\' + name[j] + '.pdf'
with open(export_file,'wb') as f:
dst_pdf.write(f)
ファイルを作成したら、Google Apps Scriptでメールを一括配信すれば完了です。