3
1

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 3 years have passed since last update.

pdfファイルの画像化と、全ページに社外秘スタンプ(画像)を押す。

Posted at

会社でこんなことが起こっていた...

  • このpdfを画像にしてほしい → 印刷してスキャナにかける (!?)
  • pdf全ページに社外秘スタンプ押したい → 印刷して全ページに社外秘のゴム印押してスキャナ (!!??)

資源大事に。
python使ってpdfを分解&画像編集&pdf化します
ちなみにadobe acrobatにはスタンプ機能や透かし機能もある
純正機能では実現できないような加工に使えるかも。

#実行した環境

  • windows 10 pro
  • Python 3.7.3 (anoaconda)
  • poppler-0.67.0_x86
  • Pillow==7.1.2
  • img2pdf==0.4.0

#事前準備

  • 外部ソフトPopplerをインストール(poppler-0.67.0_x86を使用)
  • 解凍したファイルの中の binフォルダを環境変数に追加しておく

#最初にフォルダ構成

image.png

#この部分はcmdから実行

dir_path = 'C:\\Users\\user\\Desktop\\topdf'

import os
from pdf2image import convert_from_path, convert_from_bytes

images = convert_from_path(os.path.join(dir_path,'a.pdf'))

for i in range(0,len(images)):
    images[i].save(os.path.join(dir_path,'png/test'+str(i).zfill(8)+'.png'), 'png')

#以下notebookから実行

import glob
import os

dir_path = 'C:\\Users\\user\\Desktop\\topdf'

png_data = glob.glob(os.path.join(dir_path,'png','*.png'))

画像がちゃんと読み込めるか確認
スタンプとして設定したい画像をim2とする

from PIL import Image, ImageDraw, ImageFilter

im1 = Image.open(png_data[0])
im2 = Image.open(os.path.join(dir_path,'stamp','stamp.png'))

スタンプ画像のサイズの確認や、画像の拡大を行う
画像上にpasteで貼り付ける時、その座標も調整しておく

im2.size

back_im = im1.copy()
back_im.paste(im2.resize((216, 72)), (10, 5))

調整が終わったら一括複数に貼り付ける
ファイルサイズも気になるのでjpgに設定

for o in range(0,len(png_data)):
    im1 = Image.open(png_data[o])
    im2 = Image.open(os.path.join(dir_path,'stamp','stamp.png'))
    back_im = im1.copy()
    back_im.paste(im2.resize((216, 72)), (10, 5))
    back_im.save(os.path.join(dir_path,'png_stamped',str(o).zfill(8)+'.jpg'), 
        quality=10)

img2pdfを使ってpdf化していく

import img2pdf

fname =os.path.join(dir_path,'pdf',"output.pdf") 
dirname = os.path.join(dir_path,'png_stamped')

with open(fname,"wb") as f:
    imgs = []
    for fname in os.listdir(dirname):
        if not fname.endswith(".jpg"):
            continue
        path = os.path.join(dirname, fname)
        if os.path.isdir(path):
            continue
        imgs.append(path)
    f.write(img2pdf.convert(imgs))

pdfフォルダにpdfファイルが作成される

#以上

いや、acrobat買えよ。

#参考

img2pdf PyPl

pythonによりpdfを画像にする方法

Pillowで画像に別の画像を貼り付ける

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?