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

2. IODファイル出力(連票形式 IODBDOC )

連票形式 IODBDOC を使用し、IODファイルを出力するタスクです。

構成 ユーザ定義
スタンドアローン構成 im_cookbook_8005_user_iodbdoc
分散構成 im_cookbook_8005_user_iodbdoc_rest
../../../../_images/iodbdoc_1.PNG

2.1. 入力値

im_cookbook_8005_user_iodbdoc/im_cookbook_8005_user_iodbdoc_rest <object>
├─ layoutFilePath <string>
├─ globalDataFilePath <string>
├─ colDataFilePath <string>
└─ outputIodFilePath <string>
項目名 必須/任意 配列/リスト 説明
layoutFilePath 必須 string なし IODBDOC レイアウトファイルのパブリックストレージパス
globalDataFilePath 任意 string なし 外部変数用データファイルのパブリックストレージパス
colDataFilePath 必須 string なし 行データ用データファイルのパブリックストレージパス
outputIodFilePath 必須 string なし 出力IODファイルのパブリックストレージパス

コラム

外部変数用データファイル、および、行データ用データファイルのフォーマットについては「 データファイル 」を参照してください。

注意

外部変数用データファイル、および、行データ用データファイル内で、画像データのファイルパスを指定する場合は、絶対パスで指定してください。

サンプル用の画像データは、パブリックストレージ配下に設置されたサンプル用データフォルダ内にあります。

注意

本サンプルでは、行データ用データファイルのオプションは対応していません。

注意

本サンプルでは、CSV形式の行データ用データファイルのみ対応しています。XML形式は対応していません。

2.2. 出力値

im_cookbook_8005_user_iodbdoc/im_cookbook_8005_user_iodbdoc_rest <object>
├─ status <boolean>
└─ message <string>
項目名 配列/リスト 説明
status boolean なし
true:IOD出力成功時
false:IOD出力失敗時
message string なし
IOD出力成功時:空文字
IOD出力失敗時:エラーメッセージ

2.3. スクリプト

次は、ユーザ定義「im_cookbook_8005_user_iodbdoc」のスクリプトです。

サンプル内で使用しているAPIについては「 API 」を参照してください。

コラム

ユーザ定義「im_cookbook_8005_user_iodbdoc_rest」のスクリプトの場合、14行目が次に変更となります。

const iodbdoc = new IODBDocRemote(input.layoutFilePath);
 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
/**
 * run.
 *
 * @param input {Object} - task input data.
 * @return {Object} task result.
 */
function run(input) {

  try {
    if (!input.outputIodFilePath) {
      throw new Error("出力IODファイルパスにnull、または、空文字が指定されています。");
    }

    const iodbdoc = new IODBDoc(input.layoutFilePath);
    const colData = readDataFile(input.colDataFilePath, ",");

    if (!!input.globalDataFilePath) {
      const globalData = readDataFile(input.globalDataFilePath, "=");

      // 外部変数値を設定
      globalData.forEach(function(row) {
        iodbdoc.setGlobal(row[0], row[1]);
      });
    }

    // データ行にカラムを追加
    for (let i = 0; i < colData.length; i++) {
      iodbdoc.setColStart();
      for (let j = 0; j < colData[i].length; j++) {
        iodbdoc.setCol(colData[i][j]);
      }
      iodbdoc.setColEnd();
    }

    /* IODファイルを生成 */
    const result = iodbdoc.toIOD(input.outputIodFilePath);

    if (result >= 0) {
      return {
        status: true,
        message: ""
      };
    } else {
      return {
        status: false,
        message: "ErrorCode[" + result + "] ErrorMessage[" + iodbdoc.getMessage() + "]"
      };
    }
  } catch (error) {
    return {
      status: false,
      message: error.message
    };
  }
}

/**
 * readDataFile
 * 指定したデータファイルを読み込み、データを返します。
 * @param dataFilePath {string} - 対象データファイルのパブリックストレージパス
 * @param delimiter {string} - 区切り文字
 * @return {Object} 対象データファイルのデータ群
 */
function readDataFile(dataFilePath, delimiter) {
  if (!dataFilePath) {
    throw new Error("読込対象データファイルパスにnull、または、空文字が指定されています。");
  }

  const storage = new PublicStorage(dataFilePath);
  let data = [];

  // データファイルを読み込む
  storage.openAsText(function(reader, error) {
    if (error !== null) {
      throw error;
    }

    let i = 0;

    // 1行ずつ読み込み、データを作成
    reader.eachLine(function (line) {
      if (i === 0) {
        line = line.replace(/^\ufeff/, "");
      }
      data[i] = line.split(delimiter);
      i++;
    });
  });

  return data;
}