LoginSignup
5
5

More than 5 years have passed since last update.

rubyからPDFフォームを使うpdf-forms(pdftk)の紹介

Last updated at Posted at 2017-12-01

さあ、良い子のみんなが大好きな帳票ソリューション系のお話だよ!

え?そんなの聞き飽きたって?いつものExcel + Word + VB Script + Windows の話と勘違いしているようだね。

今回はちょっとだけ違うよ、Linux + rubyでPDFを扱う話だから楽しめると思うよ。

事前準備

という事で、rubyでPDFフォーム(形が作られている穴あき形式)を出力するプログラムの紹介をします。

この記事はUbuntu16.04を利用して動作確認をしています。

まずはpdftkをインストールします。

$ sudo apt install pdftk

次にrubyもインストールします。

$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt update
$ sudo apt install ruby2.4 ruby2.4-dev

rubyからpdftkを扱うためのライブラリであるpdf-formsをインストールします。

$ sudo gem install pdf-forms

PDFフォームは検索したら出てきたサンプルをお借りしました。

$ wget http://foersom.com/net/HowTo/data/OoPdfFormExample.pdf

ちなみにPDFフォームは有料になりますがAdobe Acrobatで作成すると楽ですよ。

PDFフォームに値を入れて出力する

rubyのプログラムに移りましょう。PdfFormsのインスタンスを作ります。

require 'pdf_forms'
pdftk = PdfForms.new(`which pdftk`.chomp, utf8_fields: true)

値が入れられるフィールドを取得するにはget_field_namesを利用します。

pdftk.get_field_names 'OoPdfFormExample.pdf'

上記をコマンドから実行するには以下のようになります。

$ pdftk OoPdfFormExample.pdf dump_data_fields_utf8

出力先のpdfを開いておきます。Ubuntuなのでevinceが便利です。

$ evince OoPdfFormExample-filled.pdf

fill_formにパラメーターを指定すると値を埋め込む事ができます。

pdftk.fill_form 'OoPdfFormExample.pdf',
  'OoPdfFormExample-filled.pdf',
  {"Given Name Text Box" => "tkosuga"}

evinceで開いているファイルが自動更新されてPDFフォームに値が入ったと思います。

このライブラリはutf8も対応しているのでドイツ語を入れて見ましょう。※PDFの方でフォントが入っている必要があります。

pdftk.fill_form 'OoPdfFormExample.pdf',
  'OoPdfFormExample-filled.pdf',
  {"Given Name Text Box" => "Grußkarten"}

大丈夫ですね。

まとめ

PDFを生成するライブラリはたくさんありますが、PDFのテンプレートをプログラムで作ったりHTMLから変換するのが面倒だったりします。

それであれば最初からPDFフォームに値を入れ込む形にする方が多くの場合で奇麗に出力できるし楽だと思います。

JavaのiTextぐらいプログラムから色々できれば便利ですが、pdftkをコマンドから操作するのでも多くの事が出来ます。

どうしてもrubyでiText相当の事を行いたい場合はjrubyを使いましょう。

5
5
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
5
5