IM-PDFDesigner for Accel Platform プログラミングガイド 第13版 2019-04-01

単票形式

単票形式のPDFファイルを作成するための JSPプログラムを作成します。
JSPプログラムに記述されたPDF生成処理は、アプリケーション上で実行されます。
ここでは、JSPプログラムにPDF生成処理を記載していますが、 JSPプログラムから分離してJavaプログラムとして作成することも可能です。

コラム

文字コードは UTF-8 でファイルを保存してください。

1. 入力画面処理の作成

入力画面処理のプログラムを記述します。

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<DIV align="center" style="center; padding-top: 25px;">
    <P><FONT size="+2">チュートリアルサンプル(IODoc)</FONT></P>
    <FORM action="pdfd/javaee/tutorial/docsample_act" method="POST">
        <TABLE border="1">
            <TR>
                <TH align="center" style="padding: 5px 10px;" nowrap>
                    出力PDFファイルディレクトリ: Public Storage の [pdfd/tutorial]
                </TH>
            </TR>
            <TR>
                <TH align="center" style="padding: 5px 10px;" nowrap>
                    下のボタンをクリックすることでPDF生成を開始します。
                </TH>
            </TR>
            <TR>
                <TD align="center" style="padding: 5px 10px;" nowrap>
                    <input type="submit" value=" PDF生成 " />
                </TD>
            </TR>
        </TABLE>
    </FORM>
</DIV>
記述が完了したら %HOME_PATH%/view/pdfd/tutorial ディレクトリを作成し、
docsample.jsp というファイル名で保存してください。
ファイル名の大文字・小文字を区別する必要があります。

2. 出力画面処理の作成

次に出力画面処理のプログラムを記述します。
“//”から始まる行は、コメントですので無視して記述頂いても問題ありません。

コラム

RESTインタフェースの機能を利用する場合は、利用クラスを CSVDoc から CSVDocRemote に変更します。サンプルプログラムの 51行目のコメントを外し、50行目をコメントアウトしてください。

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="jp.co.intra_mart.foundation.service.client.file.PublicStorage" %>
<%@ page import="jp.co.intra_mart.product.pdfmaker.PDFLibSecurity" %>
<%@ page import="jp.co.intra_mart.product.pdfmaker.net.CSVDoc" %>
<%
//---
// CSVDOCサンプル(PDF-Desiner V8.0.0)
//---
// 単票用レイアウトファイルと CSV 形式のデータファイル
// からIOD中間ファイル、PDFファイルを作成するための機能を提供します。
//
// 本チュートリアルでは、単票用レイアウトファイルに
// DATデータの設定後、PDFファイルを生成しています。
//
    //-----
    // 出力ファイルパスの設定
    //-----
    // 出力ファイルは、Storage上のPublicディレクトリ以下の任意の位置に出力できます。
    //
    //     Publicディレクトリとは、
    //         %PUBLIC_STORAGE_PATH%/public/storage/ までを指しています。
    //
    // また、ファイル名は PublicStorageクラスを使用しStorage上に同一ファイルがないか確認し
    // 同一ファイルが存在する場合は、ファイル名に"_"(アンダーバー)+数値"を付加しています。
    //
    // *** このサンプルでは完全な一意性は確保できません。 ***
    //
    String outpath    = "pdfd/tutorial/"; // 出力フォルダ
    String prefix     = "nouhinkensa";    // 出力ファイル接頭文字
    String suffix     = ".pdf";           // 出力ファイル拡張子
    String outPdfPath = outpath + prefix + suffix;

    PublicStorage ps = new PublicStorage(outPdfPath);
    int i = 1;
    while (ps.exists()) {
        outPdfPath = outpath + prefix + "_" + i + suffix;
        ps = new PublicStorage(outPdfPath);
        i++;
    }

    //-----
    // インスタンス生成 (V8.0.0から変更あり)
    //-----
    // メモリオブジェクト方式のため、入力IODのみ指定。
    // CSVファイル形式の場合はCCDファイルも指定します。
    //
    // 【V8.0.0】ファイルパス指定方法の変更
    //           Storage の Publicディレクトリ からの相対パスを指定します。
    //
    CSVDoc pdf = new CSVDoc("pdfd/tutorial/nouhinkensa.iod", "");
    //CSVDocRemote pdf = new CSVDocRemote("pdfd/tutorial/nouhinkensa.iod", "");

    //-----
    // 文書情報設定 (V7.x から変更なし)
    //-----
    // 文書情報セット(各項目最大255文字まで)
    //
    // defineTitle(String)       タイトルの設定
    // defineSubTitle(String)    サブタイトルの設定
    // defineAuthor(String)      作成者の設定
    // defineApplication(String) 作成アプリケーション名の設定
    //
    //
    pdf.defineTitle("納品書兼検査票");
    pdf.defineAuthor("IM 太郎");

    //-----
    // セキュリティ設定 (V7.x から変更なし)
    //-----
    // セキュリティ情報セット(パスワードは最大32文字まで)
    //
    // <パスワード設定>
    //     setOpenPassword(String)     オープンパスワード(32文字まで)
    //     setSecurityPassword(String) セキュリティパスワード(32文字まで)
    //
    // <印刷許可設定>
    //     printSecurity(PDFLibSecurity.PRINT_ENABLE)  印刷許可
    //     printSecurity(PDFLibSecurity.PRINT_DISABLE) 印刷不許可
    //
    // <変更許可設定>
    //     modifySecurity(PDFLibSecurity.MODIFY_DISABLE)
    //         変更不許可
    //     modifySecurity(PDFLibSecurity.MODIFY_ALL)
    //         変更許可 (ページの抽出を除くすべての変更を許可)
    //     modifySecurity(PDFLibSecurity.MODIFY_FORM_AND_ANNOTATION)
    //         変更許可 ("注釈の作成","フォームフィールドの入力",
    //                   "既存の署名フィールドに署名"を許可)
    //     modifySecurity(PDFLibSecurity.MODIFY_FORM_AND_ASSEMBLY)
    //         変更許可 ("ページレイアウト", "フォームフィールドの入力",
    //                   "既存の署名フィールドに署名"を許可)
    //
    // <テキスト文字抽出許可及びアクセシビリティ許可設定>
    //     copySecurity(PDFLibSecurity.COPY_AND_ACCESSBILITY_DISABLE) 不許可
    //     copySecurity(PDFLibSecurity.COPY_AND_ACCESSBILITY_ENABLE)  許可
    //
    pdf.setSecurityPassword("secpasswd");
    pdf.printSecurity(PDFLibSecurity.PRINT_DISABLE);
    pdf.modifySecurity(PDFLibSecurity.MODIFY_DISABLE);
    pdf.copySecurity(PDFLibSecurity.COPY_AND_ACCESSBILITY_DISABLE);

    //-----
    // ページデータの生成 (V7.x から変更なし)
    //-----
    // 本チュートリアルでは、メモリオブジェクト形式でのデータ設定を実施します。
    // CSV/DATファイルオブジェクトでデータを与える場合には、
    // ここでそれぞれ入力ファイルを設定します。
    //
    // 埋め込み識別子及びデータ
    // (DBデータ検索等により取得、又はコード内で埋め込みデータを生成することの可能)
    //
    String[][] doc_data = {
            {"kyakusaki","OrderComNo","nouhin_No","tantou","nouhinsaki",
             "tyuumon_No","hinmei_code","hinmei","h_memo","syukka_day",
             "suuryou","tani","tanka","j_memo","nouki",
             "shiji_suuryou","nounyu_suuryou","konpou_suuryou","zei","zeinuki",
             "zeikomi","BarCode1","bar1","bar2","bar3"},
            {"NTTデータイントラマート","001","001-001","IM 太郎","IM商事",
            "C-001-001","YPDFAUTO-001","IM-PDFオートコンバータ","","2004/07/01",
             "2","式","1000000","","2008/07/05",
             "2","2","2","100000","2000000",
             "2100000","CODE39","CODE39","CODE39","CODE39"}
    };

    //-----
    // テキスト関連識別子データ埋め込み (V7.x から変更なし)
    //-----
    // 通常テキスト文字列を埋め込みします。
    // (※複数行カラムデータの識別子名へは、[識別子#行番号]と編集してセットします)
    //
    for(i = 0;i < doc_data[0].length;i++) {
        pdf.setData(doc_data[0][i],doc_data[1][i]);
    }

    //-----
    // PDF出力処理 (V8.0.0 から変更あり)
    //-----
    // PDFファイルへの出力処理が実行されます。
    // 正常に処理が完了した場合には指定されたPDFファイル名に該当の文書が作成されます。
    //
    // 【V8.0.0】ファイルパス指定方法の変更
    //           Storage の Publicディレクトリ からの相対パスを指定します。
    //
    int resultCode = pdf.makePDF(outPdfPath);

    //-----
    // 終了処理 (V7.x から変更なし)
    //-----
    // PDF作成処理の戻り値が0以外である場合は、処理中で何らかのエラーが発生している場合です。
    // (出力ファイルは生成されません)
    // 戻り値、及びlastMessageメソッドにより取得できるエラーメッセージから原因を特定し対応します。
    //
    String resultMessage = "";
    if(resultCode == 0){
        resultMessage = "Success !!";
    }
    else{
        resultMessage = pdf.lastMessage();
    }

// 以下Webブラウザ出力HTMLレコードです。
// 当JSPを呼び出し時に上記IOCela帳票からのPDFファイル生成が実施され、
// 正常に完了した場合には、出力PDFファイルをダウンロードする為のリンク
// が表示されます。
// 出力には処理戻り値、メッセージ取得内容を含みます。
 %>
<DIV align="center" style="center; padding-top: 25px;">
    <P><FONT size="+2">チュートリアルサンプル(IODoc)</FONT></P>
    <FORM action="pdfd/javaee/tutorial/outfile" method="POST">
        <TABLE border="1">
            <TR>
                <TH align="right" style="padding: 5px 10px;" nowrap>
                    出力PDFファイル
                </TH>
                <TD align="left" style="padding: 5px 10px;" nowrap>
                    <%= outPdfPath %>
                </TD>
            </TR>
            <TR>
                <TH align="right" style="padding: 5px 10px;" nowrap>
                    戻り値
                </TH>
                <TD align="left" style="padding: 5px 10px;" nowrap>
                    <%= resultCode %>
                </TD>
            </TR>
            <TR>
                <TH align="right" style="padding: 5px 10px;" nowrap>
                    メッセージ
                </TH>
                <TD align="left" style="padding: 5px 10px;" nowrap>
                    <%= resultMessage %>
                </TD>
            </TR>
<% if(resultCode == 0) { %>
            <TR>
                <TD colspan="2" align="center" style="padding: 5px 10px;" nowrap>
                    <INPUT type="hidden" name="file" value="<%= outPdfPath %>" />
                    <INPUT type="submit" value=" download " />
                </TD>
            </TR>
<% } %>
        </TABLE>
    </FORM>
</DIV>
記述が完了したら %HOME_PATH%/view/pdfd/tutorial ディレクトリに、
docsample_act.jsp というファイル名で保存してください。
ファイル名の大文字・小文字を区別する必要があります。

3. 認可・ルーティング設定

intra-mart Accel Platform の認可及びルーティング設定に従い、以下の設定をしてください。
<入力画面処理>
  • path属性: 任意のURL文字列
  • page属性: WEB-INF/view/pdfd/tutorial/docsample.jsp

<出力画面処理>
  • path属性: 任意のURL文字列
  • page属性: WEB-INF/view/pdfd/tutorial/docsample_act.jsp

4. 画面表示・プログラム実行

設定したURLにアクセスすると、以下の画面が表示されます。
「PDF作成」ボタンをクリックすると、PDFファイルが作成され処理終了後にダウンロードが開始されます。
実行エラーが発生した場合には、エラーメッセージの内容に従いJSPファイルを修正してください。
../../../../_images/iodoc.png

5. 確認

プログラムが正しく実行されると Public Storage の pdfd/tutorial/ に PDFファイルが作成されます。
このファイルがPDFのビューア (AdobeReaderなど) で正しく表示できれば、すべての処理が正しく行われたことになります。