渋谷スタートアップユニバーシティについて
渋谷区が主催する「渋谷スタートアップユニバーシティ」に参加し、社会人向けの3か月間の実践型協働学習プログラムに取り組みました。このプログラムは、国内企業を代表するCEOやCTOの講義を受けつつ、3人1組のチームで開発を行い、最終的にピッチコンテストで成果を発表するというものです。
プロダクト開発 (概要)
行政手続きをより簡単に、そして手軽にできるWebアプリケーションを開発しました。
開発背景
現状の行政サービスでは、多くの手続きが紙ベースで行われており、ユーザーにとっても担当者にとっても多くの時間と労力がかかるという課題がありました。特に、書類の手書きや物理的な郵送が面倒で、効率化が望まれていました。
- 「申請書類の手続きが多い」
- 「全ての書類が手書き」
上記の、2つの行政サービスにおける問題に課題を感じ、それを解決するプロダクトを開発しました。
チームでの自身の役割
チーム開発では、デザイナー1、エンジニア2で分かれて、私は主にバックエンド開発を担当し、Pythonを用いて書類のテンプレートPDFと新たに生成したPDFページを合成する自動化プログラムを作成しました。
作成したプログラムのイメージ
アプリから(戸籍謄本,転居届...)の入力した情報を、空白のテンプレートに、情報を自動的に入力していきます。例えば、各項目(氏名や生年月日など)が指定された位置にぴったりと収まり、最終的にはテンプレートに書き込まれたPDFファイルが出来上がるというイメージです
住民票関係請求書.pdfの例
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait
from reportlab.lib.units import inch, mm, cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# ファイルの指定
template_file = './resource/住民票関係請求書.pdf' # 既存のテンプレートPDF
output_file = './output/住民票関係請求書_result.pdf' # 完成したPDFの保存先
tmp_file = './__tmp.pdf' # 一時ファイル
# A4縦のCanvasを作成 -- (*1)
w, h = portrait(A4)
cv = canvas.Canvas(tmp_file, pagesize=(w, h))
# フォントを登録しCanvasに設定 --- (*2)
font_size = 10
ttf_file = './ipaexm.ttf'
pdfmetrics.registerFont(TTFont('IPAexGothic', ttf_file))
cv.setFont('IPAexGothic', font_size)
# 文字列を描画する --- (*3)
cv.setFillColorRGB(0, 0, 0)
cv.drawString(55*mm, h-43*mm, "渋谷区 神宮前 1丁目1 1−1 111号室")
cv.drawString(40*mm, h-50*mm, "ツルタ ヒロム")
cv.drawString(40*mm, h-60*mm, "鶴田 啓")
cv.drawString(156*mm, h-53*mm, "1993")
cv.drawString(172*mm, h-53*mm, "7")
cv.drawString(182*mm, h-53*mm, "15")
# 一時ファイルに保存 --- (*4)
cv.showPage()
cv.save()
# テンプレートとなるPDFを読む --- (*5)
template_pdf = PdfFileReader(template_file)
template_page = template_pdf.getPage(0)
# 一時ファイルを読んで合成する --- (*6)
tmp_pdf = PdfFileReader(tmp_file)
template_page.mergePage(tmp_pdf.getPage(0))
# 書き込み先PDFを用意 --- (*7)
output = PdfFileWriter()
output.addPage(template_page)
with open(output_file, "wb") as fp:
output.write(fp)
# 一時ファイル削除
os.remove(tmp_file)
① 必要なライブラリをインポートする。
② PDFテンプレートや出力ファイルのパスを指定する。
③ 新しいPDFを作成するためのキャンバスを用意する。
④ 日本語フォントを設定して使用できるようにする。
⑤ 文字列や情報を指定した位置に描画する。
⑥ 各項目(氏名、住所など)に対応するデータを指定位置に配置する。
⑦ 描画内容を一時PDFファイルとして保存する。
⑧ テンプレートPDFに描画済みのPDFを重ねる。
⑨ 完成したPDFを指定した場所に保存する。