IM-PDFDesigner for Accel Platform プログラミングガイド 第21版 2023-10-01

6.4.1.1. 単票形式

単票形式のPDFファイルを作成するためのスクリプトプログラムを作成します。
スクリプト開発では、htmlファイルとJavaScriptファイルを作成する必要があります。

このチュートリアルでは、サンプルとしてインストールされているレイアウトファイルを利用しています。

注意

ファイル保存時の文字コードは、 UTF-8 を指定してください。

入力画面の作成

テキストエディタを起動して、以下のHTMLを記述します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!--
// CSVDOCサンプル(PDF-Desiner V8.0.0)
// IODoc帳票データをコード内部で生成し、単票用レイアウトの
// PDF帳票ファイルを生成します。
// PDFファイルへは、文書情報/セキュリティ情報を付加し、出力しています。
    -->
<imart type="head">
  <title>IM-PDFDesigner-チュートリアル-スクリプト開発モデル-IODOC</title>
</imart>

<div class="imui-title">
  <h1>IM-PDFDesigner チュートリアル スクリプト開発モデル IODOC</h1>
</div>

<div class="imui-form-container">
  <div class="imui-chapter-title"><h2>IODOC プログラム実行</h2></div>
    <div class="imui-box-supplementation">
      <div class="supplementation-left-m">
        <span class="im-ui-icon-common-24-information"></span>
      </div>
      <p class="imui-pgh-section supplementation-left-m">
        「PDF作成」ボタンをクリックすることでPDF生成を開始します。<br>
        生成後以下のディレクトリに出力されるほか、自動ダウンロードも行われます。</p>
    </div>
    <table class="imui-table">
      <tbody>
        <tr>
          <th class="wd-225px">出力PDFファイルディレクトリ</th>
          <td>%PUBLIC_STORAGE_PATH%/pdfd/tutorial/</td>
        </tr>
      </tbody>
    </table>
    <div class="imui-operation-parts">
      <imart type="form" action="makePDF">
        <imart type="imuiButton" value="PDF作成" class="imui-medium-button" onClick="form.submit()">
      </imart>
    </div>
</div>
記述が完了したら %HOME_PATH%/jssp/src/pdfd/tutorial ディレクトリを作成し、
docsample.html というファイル名で保存してください。
ファイル名の大文字・小文字を区別する必要があります。

入力画面処理の作成

次に、JavaScriptファイルを作成します。
“//”から始まる行は、コメントですので無視して記述頂いても問題ありません。

コラム

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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
//---
// CSVDOCサンプル(PDF-Desiner V8.0.0)
//---
// IODoc帳票データをコード内部で生成し、単票用レイアウトのPDF帳票ファイルを生成します。
// PDFファイルへは、文書情報/セキュリティ情報を付加し、出力しています。
function makePDF(request) {

    //-----
    // 出力ファイルパスの設定
    //-----
    // 出力ファイルは、 %PUBLIC_STORAGE_PATH% 以下の任意の位置に出力できます。
    // また、ファイル名は PublicStorageクラスを使用しStorage上に同一ファイルがないか確認し
    // 同一ファイルが存在する場合は、ファイル名に"_"(アンダーバー)+数値"を付加しています。
    //
    // *** このサンプルでは完全な一意性は確保できません。 ***
    //
    var sessionid  = Client.identifier();    // セッションIDの取得
    var dirPath    = "pdfd/tutorial/";        // 出力フォルダ
    var prefix     = "nouhinkensa";          // 出力ファイル接頭文字
    var suffix     = ".pdf";                 // 出力ファイル拡張子
    var outPdfName = prefix + "_" + sessionid + suffix;
    var outPdfPath = dirPath + outPdfName;

    var ps = new PublicStorage(outPdfPath);
    var i = 1;
    while (ps.exists()) {
        outPdfName = prefix + "_" + sessionid + "_" + i + suffix;
        outPdfPath = dirPath + outPdfName;
        ps = new PublicStorage(outPdfPath);
        i++;
    }

    //-----
    // インスタンス生成 (V8.0.0から変更あり)
    //-----
    // メモリオブジェクト方式のため、入力IODのみ指定。
    // CSVファイル形式の場合はCCDファイルも指定します。
    //
    // 【V8.0.0】ファイルパス指定方法の変更
    //           %PUBLIC_STORAGE_PATH% からの相対パスを指定します。
    //
    var pdf = new IODoc("pdfd/tutorial/nouhinkensa.iod", "");
    //var pdf = new IODocRemote("pdfd/tutorial/nouhinkensa.iod", "");
    
    //-----
    // 文書情報設定 (V7.x から変更なし)
    //-----
    // 文書情報セット(各項目最大255文字まで)
    //
    // defineTitle(String)       タイトルの設定
    // defineSubTitle(String)    サブタイトルの設定
    // defineAuthor(String)      作成者の設定
    // defineApplication(String) 作成アプリケーション名の設定
    //
    pdf.defineTitle("PDFデザイナー体験");
    pdf.defineAuthor("IM 太郎");

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

    //-----
    // ページデータの生成 (V7.x から変更なし)
    //-----
    // 本チュートリアルでは、メモリオブジェクト形式でのデータ設定を実施します。
    // CSV/DATファイルオブジェクトでデータを与える場合には、
    // ここでそれぞれ入力ファイルを設定します。
    //
    // 埋め込み識別子及びデータ
    // (DBデータ検索等により取得、又はコード内で埋め込みデータを生成することの可能)
    //
    var doc_data = new Array(2);
    doc_data[0] = new Array(
            "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");
    doc_data[1] = new Array(
            "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(var i = 0;i < doc_data[0].length;i++) {
        pdf.setData(doc_data[0][i],doc_data[1][i]);
    }

    //-----
    // 文字枠データの埋め込み (V7.x から変更なし)
    //-----
    // 文字枠への出力は下記の順で実施する。
    //     開始宣言[setTextBoxStart]→データセット[setTextBoxData]→終了宣言[setTextBoxEnd]
    //
    // データセットは1回で1行分のデータを出力できます。
    // (文字枠より大きい文字列長のデータが指定された場合は自動改行されます。)
    // 複数回データセットを呼び出すことで、改行を含めた文字列のセットが可能です。
    //
    pdf.setTextBoxStart("syoran");
    pdf.setTextBoxData("至急納品");
    pdf.setTextBoxEnd();

    //-----
    // ページ区切りを出力 (V7.x から変更なし)
    //-----
    // 複数ページとなる伝票を印刷する場合、印刷ページ区切りを指定することで改ページ位置を指定できます。
    //
//  pdf.setOutPage();

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

    //-----
    // 終了処理 (V8.0.0 から変更あり)
    //-----
    // PDF作成処理の戻り値が0以外である場合は、処理中で何らかのエラーが発生している場合です。
    // (出力ファイルは生成されません)
    // 戻り値、及びlastMessageメソッドにより取得できるエラーメッセージから原因を特定し対応します。
    //
    // 【V8.0.0】VirtualFileクラス の廃止
    //           intra-mart API の VirtualFileクラスが廃止されました。
    //           代替クラスとして、PublicStorageクラス を使用します。
    //           使用方法は、VirtualFileクラスと同じです。
    //
    if(resultCode == 0){
        // 結果PDFファイルのダウンロード
        var pdfpath = new PublicStorage(outPdfPath);
        Module.download.send(pdfpath, outPdfName);
    }
    else{
        Module.alert.reload("SYSTEM.ERR", "(" + resultCode + ")" + pdf.getMessage());
    }
}
記述が完了したら %HOME_PATH%/jssp/src/pdfd/tutorial ディレクトリに、
docsample.js というファイル名で保存してください。
ファイル名の大文字・小文字を区別する必要があります。

認可・ルーティング設定

intra-mart Accel Platform の認可及びルーティング設定に従い、以下の設定をしてください。

  • path属性: 任意のURL文字列
  • page属性: pdfd/tutorial/docsample

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

設定したURLにアクセスすると、以下の画面が表示されます。

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

確認

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