本サイトは広告・プロモーションが含まれています
Python

【reportlab】仕事で必要なPDF編集をPythonで簡単にした話

一同「「「ピーディーエフで業務処理??」」」
工場全体を揺るがす指令がくだったのは、何でもない月曜の朝であったのだ。

どうもこんにちは。
工場勤務のプログラマーのコンです。

DXだ〜デジタル化だ〜
と色々な仕事がPCで処理する流れになっていくなか
ついに私が所属する部署でも、今まで紙とペンで1枚1分くらいで記入していた紙仕事がPC作業になりました。

その時にPythonが活躍したのでその時の話。

今まで紙に書いてたものがPDFへの記入になったぞ

紙仕事ってどんなのやねんと思われるかと思うかもしれませんが。。。


うちの職場だと新しい機材だったり、新しい試みをしたりすると報告書を書くことになっております。
書くといっても該当箇所を丸で囲ったり、日付を記入したりくらいなので簡単なもの。

例えば下みたいな感じ(めっちゃ簡略化してかいてます)

実際はもっと色々○で囲うところが多いです。(白目)

これ紙だとボールペン片手に一瞬で書いてたのですが。。。
なぜかPDFでこのフォーマットが送られるようになってしまってたのです。

紙仕事がなくなったのは良かったのですが
これをadobeのソフトで編集するのが大変だったのが、問題でした。

合格・不合格の該当箇所に丸の図形を重ねて配置して、テキストボックスを日付の下線上に配置して。。。

結構やることが多くて
(65歳の大先輩が1枚に10分以上かけてしまっていた笑)

え?こんなのiPadやタブレットPCがあれば〜
そんな大変じゃなくない??

みたいに思われるかもしれませんが、、、
タブレットPCを全員分購入するのが予算が無いのと、
毎日これを10枚以上処理するので、小さな1枚に10分使っているのは無理だなと感じてしました。


Pythonを使って、なんとか簡単にできないかとプログラムを書いたのでその話。

最初に考えたコンセプト

かと言って、私の本来の仕事は誤品判定カメラ導入なのでそんな時間もかけられず。。。

なのでコマンドプロンプト上に質問事項を表示し、ポチポチ選択しを選べる形を目指しました。
↓みたいな感じ

これでこのアプリ?プログラム?の使用者は
adobeで編集しなくてもよくて、数字を入力するだけで必要なことを記入できるようにしました。

使用したライブラリ

pdfrw

pdfrwはPDFの読み込みや保存を行うライブラリです。
既存の。。。というか既に用意されてい記入用のPDFを読み込ませるために使用します。

これは読み込みをするためだけなので、インストールさえ間違えなければ大丈夫です。

pip install pdfrw

ReportLab

読み込んだPDFの編集にはReportLabライブラリを使用しました。

ReportLabはPDFに図形の描画やテキストの記入、さらにはPDFの保存を行うライブラリです。
これで丸で囲う作業や、日付を記入することができればいいなと使用することにしました。

pyinstaller

これはライブラリでは無いのですが、、、
Pythonファイルをexe化するのに使用しました。


業務で使用するPythonスクリプトを作っても、誰もがPythonを扱えるわけでは無いので。

こんな感じでコードを書きました。

from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl
from reportlab.pdfgen import canvas
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.units import mm

in_path = input('編集するpdfをドラッグ&ドロップ)
out_path = 'result.pdf'

# PDFを読み込む
pdf = PdfReader(in_path, decompress=False)
# PDFのページデータを取得
page = pdf.pages[0]

# 保存先PDFデータを作成
cc = canvas.Canvas(out_path)

pp = pagexobj(page) #ページデータをXobjへの変換
rl_obj = makerl(cc, pp) # ReportLabオブジェクトへの変換
cc.doForm(rl_obj) # 展開

#以下座標に関しては適当(x, y)

#丸つけ
select_input = input('個数確認⇨合格:1, 不合格:2を押してEnter')
if select_input =='1':
    cc.ellipse(x1,y1, x2,y2, fill=0)
else:
    cc.ellipse(x3,y3, x4,y4, fill=0)


#日付の記入
font_name = "HeiseiKakuGo-W5"
pdfmetrics.registerFont(UnicodeCIDFont(font_name))

day_input = input('日付を記入してください(例:22/04/12)')
cc.setFont(font_name, 30)
cc.drawString(x, y, day_input)

cc.showPage()
cc.save()
print('お疲れ様でした')
input()

今回はinput関数とif文を使うことで、ユーザーが選択できるようにしました。

これを実行したらコマンドプロンプトが立ち上がって
最初考えたコンセプトができるようになります。

あとはこのコードをpytinstallerを使ってexe化します。

配布してから

とりあえず色々な人に使ってもらって色々とフィードバックをもらってます。

ファイル名を日付にするだったり、他の仕事にも導入など。。。
今後の課題ですって言って逃げてます(笑)

でも初めてPDFを編集したのでかなり楽しかったです(^_^)
adobe以外で編集したことなんてほとんどなかったので。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA