6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

パスワード付PDFを一括作成する

Last updated at Posted at 2021-05-07

諸事情で全社員に届け出住所を確認してもらう必要が生じました。
普段は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でメールを一括配信すれば完了です。

6
8
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
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?