PDFを画像変換、PDFの一部をマスキング(未)

投稿者: | 2022-11-12

□各会社ごとの提供ファイルの仕様を確認

□PDFのPWを解除する

■PDFの各ページを画像として取り出す

□画像から対象箇所をマスキングする(OCRもできるはず)

・住所
・名前

□その画像をプレビューする(マスキングが正しいか)

■その画像を結合して1つの画像にする(ここでは不要)

□マスキングした画像をExcelにペーストするか、再PDFにする

□ExcelorPDFを保存する(PWも自動)

目次

PDFを画像に変換

# https://khufrudamonotes.com/pdf-to-image-python

'''
PdfToImage
     ├ image_file ←変換した画像ファイルが出力されるフォルダ
     ├ pdf_file ←変換したいpdfを入れるフォルダ
     ├ poppler ←ダウンロードしたpopplerの中身を入れるフォルダ
     │    ├ bin
     │    ├ include
     │    ├ lib
     │    └ share
     └ pdf_to_image.py ←Pythonの実行ファイル
'''

import os
from pathlib import Path
from pdf2image import convert_from_path
import glob

parent = Path('/Users/〜/Desktop/PdfToImage')
dir_pdf_file = parent / Path('pdf_file')
dir_image_file = parent / Path('image_file')


for f_p in dir_pdf_file.glob('*.pdf'):
    
    # pdfから画像に変換する
    pages = convert_from_path(str(f_p), dpi=150)

    for i, page in enumerate(pages):
        file_name = f'{f_p.stem}_{i+1}.png'
        image_path = dir_image_file / file_name
        page.save(str(image_path), 'PNG')

画像ファイルを1つに結合する

  • PPTXなどの一覧を確認したい場合に使える
# https://note.nkmk.me/python-pillow-concat-images/

from PIL import Image
import pathlib

p = pathlib.Path('/Users/〜/Desktop/PdfToImage/image_file')

im_list = [Image.open(f_p) for f_p in p.glob('*.png')]


def get_concat_v_blank(im1, im2, color=(0, 0, 0)):
    dst = Image.new('RGB', (max(im1.width, im2.width), im1.height + im2.height), color)
    dst.paste(im1, (0, 0))
    dst.paste(im2, (0, im1.height))
    return dst

def get_concat_v_multi_blank(im_list):
    # 末尾から結合(pop(0)だと結合後に逆さまになる)
    _im = im_list.pop(-1)
    for im in im_list:
        _im = get_concat_v_blank(_im, im)
    return _im

get_concat_v_multi_blank(im_list).save('/Users/〜/Desktop/aaa/test2.png')