Pythonを使うとフォルダ内の全てのPDFの全ぺージに透かし(会社のロゴやConfidentialなど)を入れることができます。
今回は、フォルダ内の全てのPDFの全ページに透かしを入れていくプログラムを紹介します。
・全てのPDFの全ページに透かしを入れる
・透かしを入れたPDFを別ファイルとして保存する
それでは以下で詳しく紹介していきます。
フォルダ内のPDFに透かしを入れるプログラムの概要
今回は以下の作業をpythonで行うことを目指します。
1.フォルダ内のPDFを一つずつ選択する
2.PDFに透かしを入れる
3.透かしを入れたPDFを別ファイルとして保存する
詳しいプログラム解説は後半で行います。
Pythonプログラムを実行するための準備
事前の準備としてPyPDF2を使えるようにライブラリ設定をします。
準備1|PyPDF2モジュールのインストール
pip install PyPDF2
このPyPDF2を使えるようにしないとPDFを操作できないので、事前に入れておく必要があります。
準備2|透かしPDFをPythonファイルと同じフォルダに保管
透かしPDFはPythonファイルと同じフォルダに保管しておきます。
なお注意点としては、画像データで作成した透かしをPDF変換すると、透かしとして機能しなくなる場合があります。
透かしたい内容はPDFで作成するようにすることをオススメします。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#プログラム1|ライブラリ設定 import PyPDF2 import os import glob #プログラム2|ディレクトリの設定 curdirectory = os.getcwd() filedirectory = curdirectory + r'\samplefiles' #プログラム3|透かし用PDFを開く watermarkpath = 'watermark.pdf' watermark = open(watermarkpath, mode='rb') watermarkpdf = PyPDF2.PdfFileReader(watermark) #プログラム4|透かしをいれたいPDFファイルを取得 os.chdir(filedirectory) files=glob.glob('*.pdf') #プログラム5|透かしをいれたいPDFファイルを一つずつ処理する for file in files: os.chdir(filedirectory) sample = open(file, mode='rb') samplepdf = PyPDF2.PdfFileReader(sample) #プログラム6|新しいPDFファイルを作成 newpdf = PyPDF2.PdfFileWriter() # プログラム7|透かしをいれたいPDFに1ページずつ透かしを入れる for pageNum in range(samplepdf.numPages): pageObj = samplepdf.getPage(pageNum) pageObj.mergePage(watermarkpdf.getPage(0)) newpdf.addPage(pageObj) # プログラム8|透かしをいれたPDFを保存 os.chdir(curdirectory) pdfname = f'watermarked_{file}' result = open(pdfname,'wb') newpdf.write(result) # プログラム9|透かしをいれたいPDFと透かしを入れたPDFを閉じる sample.close() result.close() # プログラム10|透かし用PDFを閉じる watermark.close() |
以下で詳しく説明しています。
プログラム1|ライブラリの設定
1 2 3 4 |
#プログラム1|ライブラリの設定 import PyPDF2 import os import glob |
1 2 3 4 |
# プログラム解説 ・PyPDF2|PDF操作に使う ・os|ディレクトリ指定に使う ・glob|PDFファイルのパス取得に使う |
このプログラムでは、3つのライブラリ設定をします。
PyPDF2は透かしPDFや元PDFを開いたり結合したりするときに使います
osで現在のフォルダと透かしをいれたいPDF用のフォルダをはOutlookでメールを作成したり送信したりするときに使います。
osはメール添付時にフルパスを指定しないとメール送信が不安的になるときがあったため使います。
プログラム2|ディレクトリの設定
1 2 3 |
#プログラム2|ディレクトリの設定 curdirectory = os.getcwd() filedirectory = curdirectory + r'\samplefiles' |
1 2 3 |
# プログラム解説 Pythonファイルと同じフォルダをcurdirectoryとする 「samplefiles」フォルダをfiledirectoryとする |
Pythonファイルと同じフォルダを「curdirectory」、curdirectoryのsamplefilesフォルダを「filedirectory」とします。
なお「filedirectory」内の全てのPDFの全ページに透かしをいれていきます。
ここで設定する理由は、後半のプログラムでこの2つのフォルダを行き来するので、ここでフォルダを指定しておきます。
プログラム3|透かし用PDFを開く
1 2 3 4 |
#プログラム3|透かし用PDFを開く watermarkpath = 'watermark.pdf' watermark = open(watermarkpath, mode='rb') watermarkpdf = PyPDF2.PdfFileReader(watermark) |
プログラム解説
1 2 3 4 |
# プログラム解説 変数watermarkpathを「watermark.pdf」とする 変数watermarkにwatermarkpathで指定したパスのファイルを開く 変数watermarkpdfでwatermarkをPDFとして読み込む |
上記の3行を一言で言うと、透かし用PDFを開いてwatermarkpdfとして取得します。
このwatermarkpdfを後半のプログラムで重ねて合わせていきます。
プログラム4|透かしをいれたいPDFファイルを取得
1 2 3 |
#プログラム4|透かしをいれたいPDFファイルを取得 os.chdir(filedirectory) files=glob.glob('*.pdf') |
1 2 3 |
# プログラム解説 ディレクトリをfiledirectory(samplefilesフォルダ)に切り替える 「samplefilesフォルダ」内の全PDFを取得する |
上記のフォルダに含まれる全てのPDFを取得します。
フォルダ内の一つ一つのPDFに対して、以降のプログラムで透かしを入れていきます。
プログラム5|透かしをいれたいPDFファイルを一つずつ処理する
1 2 3 4 5 |
#プログラム5|透かしをいれたいPDFファイルを一つずつ処理する for file in files: os.chdir(filedirectory) sample = open(file, mode='rb') samplepdf = PyPDF2.PdfFileReader(sample) |
1 2 3 4 5 |
# プログラム解説 「samplefiles」のフォルダ内のPDFを一つずつ処理をする ディレクトリをfiledirectory(samplefilesフォルダ)に切り替える 変数sampleにfileで指定したパスのファイルを開く 変数sampelpdfでsampleをPDFとして読み込む |
プログラム4で取得したfilesのPDFを一つずつ読み込んで処理を実行していきます。
プログラム6|新しいPDFファイルを作成
1 2 |
#プログラム6|新しいPDFファイルを作成 newpdf = PyPDF2.PdfFileWriter() |
1 2 |
# プログラム解説 変数newpdfを書き込み用PDFとして作成 |
新しいPDFを作成します。
この新しいPDFに「透かしPDF」と「透かしを入れたPDF」を重ね合わせていきます。
プログラム7|透かしをいれたいPDFに1ページずつ透かしを入れる
1 2 3 4 5 |
# プログラム7|透かしをいれたいPDFに1ページずつ透かしを入れる for pageNum in range(samplepdf.numPages): pageObj = samplepdf.getPage(pageNum) pageObj.mergePage(watermarkpdf.getPage(0)) newpdf.addPage(pageObj) |
1 2 3 4 5 |
# プログラム解説 プログラム6で開いたsamplepdfを1ページずつ処理する 変数pageObjをsamplepdfの各ページのPDFを設定する pageObjをwatermarkpdf(プログラム3の透かしPDF)の1ページ目と重ね合わせる newpdf(プログラム7で設定)にpageObj(透かしを入れたページ)を入れ込む |
上の図のようなイメージで、samplepdfの全ページに透かしを入れていきます。
プログラム8|透かしをいれたPDFを保存
1 2 3 4 5 |
# プログラム8|透かしをいれたPDFを保存 os.chdir(curdirectory) pdfname = f'watermarked_{file}' result = open(pdfname,'wb') newpdf.write(result) |
1 2 3 4 5 |
# プログラム解説 ディレクトリをcurdirectory(pythonファイルと同じフォルダ)に切り替える 変数pdfnameを「watermarked_元のPDFファイル名」とする 変数resultでpdfnameを開く newpdfで取得したPDFデータをresultに書き込む |
透かしを入れたPDFを新しいファイル名として保存していきます。
ファイル名は「watermark_元のPDF名.pdf」です。
プログラム9|透かしをいれたいPDFと透かしを入れたPDFを閉じる
1 2 3 |
# プログラム9|透かしをいれたいPDFと透かしを入れたPDFを閉じる sample.close() result.close() |
1 2 3 |
# プログラム解説 sample(透かしを入れたいPDF)を閉じる result(透かしを入れたPDF)を閉じる |
透かしを入れたいPDFと透かしを入れたPDFは役目を終えたので、ファイルを閉じます。
これらを閉じて、for文の次の繰り返し処理(プログラム6)に戻ります。
プログラム10|透かし用PDFを閉じる
1 2 |
# プログラム10|透かし用PDFを閉じる watermark.close() |
1 2 |
# プログラム解説 watermark(透かしPDF)を閉じる |
最後に透かしPDFを閉じます。
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。