Python PDF操作まとめ|結合・画像保存・開く・閉じる

Python

Pythonで、PDFファイルを結合・画像として保存・開く・閉じる方法をまとめました。用途に合わせたPDF操作をコード付きでご紹介します。

ぜひ、お試しください。

PDFを開いて閉じる 外部プログラム操作Subprocess

PDFを開いて閉じる(特定PDF)

以下のコードを実行すると、外部アプリを起動して2秒後に終了します。


import subprocess
import time

#Acrobat.exe 保管場所
acr_path = "C:/Program Files/Adobe/Acrobat DC/Acrobat/Acrobat.exe"

#開きたいPDF
pdf_path = 'C:/Users/admin/Desktop/test/test.pdf'

#PDFファイルを開く
pdf_pro = subprocess.Popen([acr_path,pdf_path], shell=False)
time.sleep(2)

#PDFファイルを終了
pdf_pro.kill()
time.sleep(1)

 

コード実行後

指定したPDFファイルを開きます。
その後 [time.sleep(2)] を使用して、2秒後にPDFを閉じます。
[shell=False] を指定することで、[kill] でファイルを閉じることができました。


 
 

PDFを開いて閉じる(複数PDF)

以下のコードを実行すると、複数PDFファイルを開いて閉じます。


import subprocess
import os
import time

#Acrobat.exe 保管場所
acr_path = "C:/Program Files/Adobe/Acrobat DC/Acrobat/Acrobat.exe"

#PDF保管フォルダ
pdf_path = 'C:/Users/admin/Desktop/test/'

#フォルダ内にあるファイル取得
pdf_list = os.listdir(pdf_path)

#フォルダ内にあるファイルをループ
for idx,file in enumerate(pdf_list):
    pdf_pro = subprocess.Popen([acr_path,pdf_path+file], shell=False)
    time.sleep(2)
    pdf_pro.kill()
    time.sleep(1)

 

コード実行後

[pdf_path] フォルダ内に、複数のPDFファイルが存在しています。

 

[pdf_path] 内をループし、1つずつPDFファイルを開いて閉じるを繰り返します。


 

動作環境
Python 3.7.4
 
 

PDFを結合(フォルダ内のPDFを連結):PyPDF

PDFを結合:PyPDF

以下のコードを実行すると、特定フォルダにある複数PDFをすべて結合します。


import PyPDF2
import glob
import os

#対象フォルダ
current_dir= "C:/Users/admin/test/PDFファイル"

#フォルダをループする準備
files = glob.glob(current_dir+ "/*")

#結合準備
merger = PyPDF2.PdfFileMerger()

#フォルダ内のファイルをループ
for file in files:

    #PDF結合
    merger.append(file)

#結合後のPDFファイル名
merger.write('結合PDF.pdf')

#システムを閉じる
merger.close()

 

コード実行前

指定フォルダにPDFファイルが複数存在している状態です。


 

各PDFの中身は、1ページで構成されています。


 

コード実行後

フォルダ内のPDFファイルをすべて結合した「結合PDF.pdf」ができます。


 

「結合PDF.pdf」を開くと、5つのPDFが1つのファイル内に連結しています。


 
 
動作環境
Python 3.7.4
PyPDF2 1.26.0
 
 

PDFを座標指定して画像保存(特定PDF) 2選

PDFを座標指定して画像保存(特定PDF)

以下のコードを実行すると、PDFの一部を画像保存します。


import pyautogui as pag
from PIL import Image
import subprocess
import time

acr_path = "C:/Program Files/Adobe/Acrobat DC/Acrobat/Acrobat.exe"

#PDF指定
pdf_path = 'C:/Users/admin/Desktop/test/PDFファイル/経費精算書_001.pdf'

#PDFファイルを開く
pdf_pro = subprocess.Popen([acr_path,pdf_path],shell=False)
time.sleep(2)

#座標指定箇所を切り取りして画像保存
name_img = pag.screenshot('temp.png',region=(519, 236, 150, 40))

pdf_pro.kill()

 

コード実行前

切り抜く部分の座標をあらかじめ取得しておき、
[region=(519, 236, 150, 40)] へ入力します。

 
コード実行後

指定したPDFファイルを開き、
座標部分を「temp.png」というファイル名で画像保存します。

その後、PDFを閉じます。


 
 

PDFを座標指定して画像保存(複数PDF)

以下のコードを実行すると、複数PDFファイルの指定箇所を画像データとして保存します。


import pyautogui as pag
from PIL import Image
import subprocess
import os
import time

acr_path = "C:/Program Files/Adobe/Acrobat DC/Acrobat/Acrobat.exe"

#PDF指定
pdf_path = 'C:/Users/admin/Desktop/test/PDFファイル/'

pdf_list = os.listdir(pdf_path)
i = 1

#フォルダ内にあるPDFファイルをループ
for idx,file in enumerate(pdf_list):

    #PDFファイルを開く
    pdf_pro = subprocess.Popen([acr_path,pdf_path+file],shell=False)
    time.sleep(2)

    #座標指定箇所を切り取りして画像保存
    name_img = pag.screenshot(str(i) + 'temp.png',region=(519, 236, 150, 40))

    i = i + 1
    pdf_pro.kill()
    time.sleep(1)

 

コード実行前

[pdf_path] フォルダ内に、複数のPDFファイルが存在しています。


 

PDFは全ファイル同じフォーマットです。

 
コード実行後

[pdf_path] 内をループし、1つずつPDFファイルを開いて画像を保存します。

指定座標のテキスト部分を抽出することができました。


 
 
動作環境
Python 3.7.4
PyAutoGUI 0.9.52
 
 

ExcelをPDF保存する win32com.client使用 4選

ExcelをPDF保存(特定シート)

以下のコードを実行すると、特定のシートをPDF保存します。


import win32com.client

#エクセルファイルを開く
excel = win32com.client.Dispatch("Excel.Application")
file = excel.Workbooks.Open('C:/Users/xxx/Desktop/test/test.xlsx')

#対象シートを指定
file.WorkSheets("Sheet1").Activate()

#PDF変換
file.ActiveSheet.ExportAsFixedFormat(0, 'C:/Users/xxx/Desktop/test/test.pdf')

#エクセルを閉じる
file.Close()
excel.Quit()

 

コード実行後

エクセルファイルの特定シートをPDFに変換します。

エクセルマクロ:特定シートをPDF保存
 
 

ExcelをPDF保存(特定シート)

以下のコードを実行すると、特定のシートをPDF保存します。


import win32com.client

#エクセルファイルを開く
excel = win32com.client.Dispatch("Excel.Application")
file = excel.Workbooks.Open('C:/Users/xxx/Desktop/test/test.xlsx')

#全てのシートをループ
for sh in file.Sheets:

    if sh.Name == 'Sheet2':

        #ファイルを選択
        excel.Worksheets(sh.Name).Activate()

        #PDF変換
        file.ActiveSheet.ExportAsFixedFormat(0, 'C:/Users/xxx/Desktop/test/' + sh.Name + '.pdf')

        break

#エクセルを閉じる
file.Close()
excel.Quit()

 

コード実行後

ファイル内のすべてのシート名をループして、指定シートがあった場合にPDFを作成します。

この場合は「Sheet2」シートをPDFで保存します。
作成されるPDFは、「Sheet2.pdf」というファイル名で保存されます。


 
 

ExcelをPDF保存(複数シート)

以下のコードを実行すると、複数シートをPDF保存します。


import win32com.client

#エクセルファイルを開く
excel = win32com.client.Dispatch("Excel.Application")
file = excel.Workbooks.Open('C:/Users/xxx/Desktop/test/test.xlsx')

#対象シートを指定
file.Worksheets(["Sheet1", "Sheet2"]).Select()

#PDF変換
file.ActiveSheet.ExportAsFixedFormat(0, 'C:/Users/xxx/Desktop/test/test.pdf')

#エクセルを閉じる
file.Close()
excel.Quit()

 

コード実行後

エクセルファイルの複数シートを、1つのPDFファイルにして保存します。


 
 

ExcelをPDF保存(全てのシート)

以下のコードを実行すると、全てのシートをPDF保存します。


import win32com.client

#エクセルファイルを開く
excel = win32com.client.Dispatch("Excel.Application")
file = excel.Workbooks.Open('C:/Users/xxx/Desktop/test/test.xlsx')

#全てのシートをループ
for sh in file.Sheets:

    #ファイルを選択
    excel.Worksheets(sh.Name).Activate()
    ws = excel.ActiveSheet

    #シート名を取得
    name = sh.Name

    #PDF変換
    file.ActiveSheet.ExportAsFixedFormat(0, 'C:/Users/xxx/Desktop/test/' + name + '.pdf')

#エクセルを閉じる
file.Close()
excel.Quit()

 

コード実行後

エクセルファイルの全シートを一括でPDFに変換します。


 
 

動作環境
Python 3.7.4

この記事がお役に立ちますと幸いです。
 

404 NOT FOUND | kiriNote

 

「Python2年生 スクレイピングのしくみ」

機械学習を始めたい方必見
必要最低限の文法をピックアップして解説
ネットからデータ収集を始めたい方へオススメの1冊です!