LoginSignup
9
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-14

はじめに

やってまいりました。
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です。

9
8
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
9
8