# ■■■ スキャンで生成されたpdfファイルの各ページから画像抽出、QRコード内容名のpdfファイルにする。
# ■■■ ファイルパスはWindows形式、Desktop上での操作にしてある。●●のところを適宜修正されたし。
# ■手順1 初期設定
# ■手順2 PDFのコピーを保存する
# ■手順3 コピーされたPDFのページ数を得る
# ■手順4 PDF各ページのJPEG画像を抽出する
# ■手順5 JPEG画像にあるQRコードを読む。各ページで一番左上にあるQRコードがリストの最初になる
# ■手順6 コピーしたPDFのファイル名を「1つ目のQRコード内容&PDFページ数」に変更する
# ■手順1 初期設定
# pip install PyPDF4
# pip install
# pip install pyzbar
# input
from PyPDF4 import PdfFileReader
from PIL import Image
import shutil
import pyzbar.pyzbar
#import cv2 #CV2では各ページにQRコード複数あるとデータが読めない。かわりにpyzbarを使う。
# ■手順2 PDFのコピーを保存する
# 画像抽出用PDFを取得(バイナリモード)
name_dir_pdf = "C:/Users/●●/Desktop/"
name_pdf_target = "pdf_qrcode"
name_ext_file = ".pdf"
path_pdf_origin = name_dir_pdf + name_pdf_target + name_ext_file
#pdf = open("C:/Users/●●/Desktop/pdf_qrcode.pdf", 'rb')
#もとのPDFをコピー保存する
path_pdf_copy = name_dir_pdf + name_pdf_target + "_copy" + name_ext_file
path_old = path_pdf_origin
path_new = path_pdf_copy
shutil.copyfile(path_old, path_new)
print("file copyed")
# ■手順3 コピーされたPDFのページ数を得る
pdf = open(path_pdf_copy, 'rb')
reader = PdfFileReader(pdf)
#print("Now pdf is opened")
# Page数を取得
pgnum = reader.getNumPages()
print("ページ数=",pgnum)
# ■手順4 PDF各ページのJPEG画像を抽出する
# Pageオブジェクトを取得・・・ドキュメントスキャナC4473の場合、PDFにすると、画像はJPEGになっているのでJPEGを抽出する。
name_images=[]
for i in range(pgnum):
pg = reader.getPage(i)
# Pageオブジェクトの探索
if '/XObject' in pg['/Resources']: # (1)
xobjs = pg['/Resources']['/XObject']
for key, obj in xobjs.items():
item = obj.getObject()
if item['/Subtype'] == '/Image': # (2)
if '/Filter' in item and item['/Filter'] == '/DCTDecode':
# PageオブジェクトからJPEGファイルのバイナリデータを取得・出力
data = item.getData()
name_image=key[1:]+".jpg"
img = open(name_image, 'wb')
#print(i,name_image)
name_images.append(name_image) #リストへの要素追加は()でくくる!
img.write(data)
img.close()
pdf.close()
print("pdf was closed")
# ■手順5 JPEG画像にあるQRコードを読む。各ページで一番左上にあるQRコードがリストの最初になる
data_qrcodes = []
for name_image in name_images:
qr = pyzbar.pyzbar.decode(Image.open(name_image))
#print(qr)
num_qr = len(qr)
print(name_image,"に含まれるQRコードの数は",num_qr,"です。")
for i in range(0,num_qr):
data_qrcode = qr[i].data.decode()
#print(data_qrcode)
data_qrcodes.append(data_qrcode)
print(data_qrcodes)
# ■手順6 コピーしたPDFのファイル名を「1つ目のQRコード内容&PDFページ数」に変更する
name_pdf_destination = data_qrcodes[0] + "_" + str(pgnum) + "pages"
path_pdf_destination = name_dir_pdf + name_pdf_destination + name_ext_file
res = shutil.move(path_pdf_copy, path_pdf_destination)
print("ファイル名:",path_pdf_destination,"が保存されました")