Help us understand the problem. What is going on with this article?

Drawを帳票ツールとして使う

More than 3 years have passed since last update.

はじめに

やってまいりました。
LibreOfficeアドベントカレンダー2014の季節です。
Shinji Enokiさんに続き15日目担当です。

テーマはDraw

みなさん、知ってましたか?
DrawでPDF作成できるですよ。
それもPDFフォームも作れてしまいます。

ExcelやWordで作っているお申込みフォーム、
あれは本来PDFフォームでスマートにやるべきです。

DrawでPDFを作ってみます。

DrawでPDFを作成する

名前のテキストボックスと
性別のドロップダウンリストを作って
PDFで保存しましょう。

起動

  1. LibreOffice Drawを起動
    • 用紙設定はA4縦に設定されています。
    • そのまま行きましょう。

テキストボックスを作る

  1. [表示] > フォームコントロール
    • フォームコントロールツールバーがでます。
    • 手のマーク、デザインモードをOnにします。
  2. テキストボックスを選択して用紙に書きます。
    • 用紙の端から端まで大きく
    • そのまま右クリック
  3. コントロールを選択
    • 名前に name と入れます。
    • フォントを少し大きくしておきましょう。
    • フォントを選択
    • フォントサイズを32ptにします。
  4. ×で閉じます

コンボボックスを作る

  1. 次にコンボボックスを選択して用紙に書きます。
  2. そのまま右クリック
  3. コントロールを選択
    • 全般タブの名前にgenderと入れます。
    • 全般タブの下の方のリストの項目に入力します。
    • 不明と書き[Shift]+[Enter]
    • 男と書き[Shift]+[Enter]
    • 女と書き[Shift]+[Enter]
    • 適応不能と書き[Shift]+[Enter]
    • フォントを選択しフォントサイズを32ptにします。
  4. ×を押して閉じます。

性別なのに何で、不明とか適応不能とかあるんだ?
詳しい説明はこちらの記事にて

PDFに書き出し

  1. これをPDFに書き出します。
    • [ファイル] > [PDFとしてエクスポート]を選択
    • デスクトップに名前を付けて保存します。

これで完成です。
作成したPDFを開いて自分の名前が書けるか、
性別が選べるか確認してみましょう。

PDFフォームを帳票テンプレートに

このPDFフォームを帳票テンプレートにしてしまいます。
フォームに内容を挿入できるプログラムが書ければ、
帳票ツールとして機能するはずです。

エンドユーザーにも使える帳票設計ツールを

JavaならiText、
C#ならiTextSharp、
PHPならTCPDF等とPDFを生成するAPIはありますが、
全てこの座標軸に文字を置くといったような、
プログラムでレイアウトを記述しないといけません。

End User(一般社員)では無理です。
でもDrawで作るPDFであれば、
End Userも使えて自由にレイアウト変更ができるでしょう。

レイアウト変更は現場から挙がってきます。
現場で変更してあげるようにしてやれば、
情報システム部のような人が他の業務を止めて、
ヒアリングをして帳票設計をする。
相互理解が足りなかったので作り直し…
といった面倒な時間を節約することができます。

プログラムでPDFフォームにデータ挿入

私の調査では、以下の言語のライブラリーであれば入力フォームに
データを差し込むことができるようです。

  • Java
    • iText
  • C#
    • iTextSharp
  • Perl
    • CAM::PDF
  • Python
    • fpdfgen + pdftk.exe

ここでちゃんと試せたのはJavaだけです。
Javaのソースコードを書いて置きます。

AcroFieldを使ってフォームに差し込み
package fillpdfform;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *PDFフォームに任意の値を入れる
 * 
 * @author yusuke
 */
public class ITextPDFForm {

    public static final String pdfform="C:/Users/yusuke/pdfform.pdf";
    public static final String fillpdfform="C:/Users/yusuke/fillpdfform.pdf"; 

    public void manipulatePdf(String src,String dest)throws IOException,DocumentException{
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest));
        AcroFields form = stamper.getAcroFields();
        //フォームにテキストを挿入する処理
        form.setField("name", "荒川さん"); //TextBox
        form.setField("gender","男"); //ComboBox
        stamper.close();
    }

    /**
     * @param args the command line arguments
     * @throws com.itextpdf.text.DocumentException
     * @throws java.io.IOException
     */
    public static void main(String[] args) throws DocumentException, IOException {
        // TODO code application logic here
        ITextPDFForm example = new ITextPDFForm();
        example.manipulatePdf(pdfform,fillpdfform);
    }
}

ソースはGitHubに置いておきます。
iTextFillPDFFrom

本当はPerl,Pythonでもやってみたかったのですが、
今回は時間切れです。

参考サイト

ITEXT IN ACTION: CHAPTER 8: FILLING OUT INTERACTIVE FORMS
PART2.CHAPTER08.TEXTFIELDS

次は、16日目 Souichiro.ishikawaさん
Calcで指数平滑 | Techinal Convolutionです。

arachan@github
情報システムという名の雑用係 社内のパソコンをADなしで集中管理したいために PowerShellを少し嗜む。 プログラムよりもUBCD使ってPCを修理するのが得意な逸般人 最近、Win7マシンに軒並み入れ替わったので、 修理マシンがなく、プログラムに精を出し始めたが、 大して何も作れてないマン。 Excel方眼紙とネ申FileMakerが大っ嫌い。
http://arachansan.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした