IM-PDFAutoConverter for Accel Platform プログラミングガイド 第15版 2024-04-01

5.2. jsプログラムの作成(スクリプト開発モデル)

スクリプト開発モデルとして、HTML/JavaScriptのプログラムを作成します。

5.2.1. 準備

本チュートリアルでは、後述で作成する画面から変換対象ファイルをアップロードすることで変換処理を実行します。

変換対象のファイルをご用意ください。

5.2.2. jsファイルの作成

テキストエディタを使用してhtmlファイルとjsファイルを作成します。

Resin の場合、< %RESIN_HOME%/webapps/warファイルと同名のディレクトリ/WEB-INF/jssp/src/pdfa >の配下にそれぞれ「 convert.html 」「 convert.js 」の名前でファイルを作成し、次のソースを実装します。

convert.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
39
40
41
42
43
44
45
<imart type="head">
  <title>IM-PDFAutoConverter-チュートリアル-スクリプト開発モデル-convert</title>
	<script type="text/javascript">
		$(function (){
			$("#convert_submit").click(function() {
				if($("#in_file_path").val().length == 0) {
					imuiAlert("ファイルを選択してください。", "警告");
					return;
				}
				$("#convert_form").submit();
			});
		});
	</script>
</imart>

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

<div class="imui-form-container">
  <div class="imui-chapter-title"><h2>convert プログラム実行</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>
        PDFに変換するファイルを指定し、「PDF変換」ボタンを押下してください。
      </p>
    </div>
    <imart type="form" action="convertPDF" method="POST" id="convert_form" enctype="multipart/form-data">
      <table class="imui-table">
        <tbody>
          <tr>
            <th class="wd-225px">変換対象ファイル</th>
            <td><input type="file" id="in_file_path" name="in_file_path"></td>
          </tr>
        </tbody>
      </table>
      <div class="imui-operation-parts">
        <imart type="imuiButton" value="PDF変換" class="imui-medium-button" id="convert_submit"></imart>
      </div>
    </imart>
  </div>
</div>

注意

文字コードを UTF-8 にして保存してください。

convert.js

  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
179
180
181
182
183
184
185
186
187
/**
 * アップロードしたファイルをPDFファイルに変換します。
 * @param {Object} request リクエスト
 */
function convertPDF(request) {

	// リクエストからアップロードしたファイル情報を取得します。
	let uploadFile = request.getParameter("in_file_path");
	let inFileStream = uploadFile.getValueAsStream();
	let inFileName = uploadFile.getFileName();

	// アップロードしたファイルを一時ファイルに保管します。
	let sessionid  = Client.identifier();
	let inFileExt = inFileName.substr(inFileName.lastIndexOf(".") - inFileName.length);
	let inFile = File.createTempFile(sessionid, inFileExt, "", false);
	inFile.save(inFileStream);

	// 出力するPDFファイルパスを作成します。
	let outFile = File.createTempFile(sessionid, ".pdf", "", false);
	let pdfFileStream = null;
	let errorMessage;

	try {
		// IM-PDFAutoConverterを実行し、PDFファイルに変換します。
		let outPdfPath = execPdfautoconverter(inFile.path(), outFile.path());

		// PDFファイルを取得します。
		let pdfFile = new File(outPdfPath);
		if(pdfFile.exist()) {
			pdfFileStream = pdfFile.load();
		}
	}
	catch(e) {
		errorMessage = e.message + (isUndefined(e.stack) ? '' : '\r\n' + e.stack);
	}

	// 保存したファイルを削除します。
	inFile.remove();
	outFile.remove();

	// 生成したPDFファイルをダウンロードします。
	if(pdfFileStream != null) {
		let pdfFileName = inFileName.substr(0, inFileName.lastIndexOf(".")) + ".pdf";
		Module.download.send(pdfFileStream, pdfFileName);
	}
	else {
		let logger = Logger.getLogger();
		logger.error(errorMessage);
		let response = Web.getHTTPResponse();
		response.sendError(500, "Failed to convert PDF file.");
	}
}

/**
 * IM-PDFAutoConverterを実行し、PDFファイルに変換します。
 * @param {String} inFilePath 変換対象のファイルパス
 * @param {String} outFilePath 変換後の出力先PDFファイルパス
 * @return {String} 出力したPDFファイルパス
 */
function execPdfautoconverter(inFilePath, outFilePath)
{
	// PDF変換処理のインスタンスを生成します。
	// @return {Object} PDF変換処理のインスタンス
	let pdfautoconverter = new IMPDFAutoConverter();

	// PDF出力時に設定する文書情報を指定します。
	// pdfautoconverter.setDocInf(title, subTitle, creator, app, keyword);
	// @param {String} title 文書タイトル
	// @param {String} subTitle 文書サブタイトル
	// @param {String} creator 作成者
	// @param {String} app 作成アプリケーション名
	// @param {String} keyword キーワード
	pdfautoconverter.setDocInf("文書タイトル", "文書サブタイトル", "作成者", "作成アプリケーション名", "キーワード");

	// PDF出力時に設定する文書情報を名前で指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// 本メソッドを指定した場合、setDocInfで指定した文書情報は破棄されます。
	// 本メソッドを指定した場合、setDocInfAndSecurityで指定した文書情報及びセキュリティ設定は破棄されます。
	// setDocInfByName(name);
	// @param {String} name 文書情報設定の名称
//	pdfautoconverter.setDocInfByName("docinf-name");

	// PDF出力時に設定するセキュリティ設定を名前で指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// 本メソッドを指定した場合、setSecurity40、setSecurity128で指定したセキュリティ設定は破棄されます。
	// 本メソッドを指定した場合、setDocInfAndSecurityで指定した文書情報及びセキュリティ設定は破棄されます。
	// setSecurityByName(name);
	// @param {String} name セキュリティ設定の名称
//	pdfautoconverter.setSecurityByName("security-name");

	// PDF出力時に設定する文書情報とセキュリティを名前で指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// 本メソッドを指定した場合、setDocInfで指定した文書情報は破棄されます。
	// 本メソッドを指定した場合、setDocInfByNameで指定した文書情報は破棄されます。
	// 本メソッドを指定した場合、setSecurity40、setSecurity128で指定したセキュリティ設定は破棄されます。
	// 本メソッドを指定した場合、setSecurityByNameで指定したセキュリティ設定は破棄されます。
	// setDocInfAndSecurity(name);
	// @param {String} name 文書情報とセキュリティ設定の名称
//	pdfautoconverter.setDocInfAndSecurity("docinf_security-name");

	// PDF出力時に設定する40ビットセキュリティ情報を指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// 本メソッドを指定した場合、setSecurityByNameで指定したセキュリティ設定は破棄されます。
	// 本メソッドを指定した場合、setDocInfAndSecurityで指定した文書情報及びセキュリティ設定は破棄されます。
	// setSecurity40(openPassword, securityPassword, noPrint, noEdit, noCopy, noAddNote);
	// @param {String} openPassword オープンパスワード
	// @param {String} securityPassword セキュリティパスワード
	// @param {boolean} noPrint 印刷を許可しない場合は true、それ以外は false
	// @param {boolean} noEdit アクセス(編集)を許可しない場合は true、それ以外は false
	// @param {boolean} noCopy コピーを許可しない場合は true、それ以外は false
	// @param {boolean} noAddNote 文書変更(注釈追記)を許可しない場合は true、それ以外は false
//	pdfautoconverter.setSecurity40("open", "security", false, false, false, false);

	// PDF出力時に設定する128ビットセキュリティ情報を指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// 本メソッドを指定した場合、setSecurityByNameで指定したセキュリティ設定は破棄されます。
	// 本メソッドを指定した場合、setDocInfAndSecurityで指定した文書情報及びセキュリティ設定は破棄されます。
	// setSecurity128(openPassword, securityPassword, print, acc, copy, change);
	// @param {String} openPassword オープンパスワード
	// @param {String} securityPassword セキュリティパスワード
	// @param {String} print 印刷セキュリティを表す文字列
	//												"PRINT_DISABLE"		:許可しない
	//												"PRINT_DEGRADED"	:低解像度で許可する
	//												"PRINT_ENABLE"		:許可する
	// @param {String} acc アクセス(編集)セキュリティを表す文字列
	//												"ACC_DISABLE"		:許可しない
	//												"ACC_ENABLE"		:許可する
	// @param {String} copy コピーセキュリティを表す文字列
	//												"COPY_DISABLE"		:許可しない
	//												"COPY_ENABLE"		:許可する
	// @param {String} change 文書変更(注釈追記)セキュリティを表す文字列
	//												"DOCCHANGE_DISABLE"	:許可しない
	//												"DOCCHANGE_ASSEMBLE":アセンブリを許可する
	//												"DOCCHANGE_FORMFILL":フォーム入力を許可する
	//												"DOCCHANGE_ADDNOTE"	:フォーム入力と注釈追加を許可する
	//												"DOCCHANGE_ENABLE"	:許可する
//	pdfautoconverter.setSecurity128("open", "security", "PRINT_DISABLE", "ACC_DISABLE", "COPY_DISABLE", "DOCCHANGE_DISABLE");

	// フォルダ名及びフォルダ別設定の情報を設定します。
	// 本メソッドを指定した場合、その他のメソッドで指定した全ての設定は破棄されます。
	// setFolderName(name, overwrite);
	// @param {String} name フォルダ名
	// @param {boolean} overwrite フォルダ別設定を上書き設定する場合は true、それ以外は false
//	pdfautoconverter.setFolderName("folder1", false);

	// PDF出力時に追加するスタンプ設定名を指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// addStamp(stampName);
	// @param {String} stampName スタンプ設定名
//	pdfautoconverter.addStamp("stamp1");

	// WEB用に最適化する/しないを指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// setFastWebView(fastWebView);
	// @param {boolean} fastWebView 最適化する場合は true、それ以外は false
	pdfautoconverter.setFastWebView(true);

	// PDF出力時に使用するプリンタの名前を指定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// setPrinter(name);
	// @param {String} name プリンタ名
	pdfautoconverter.setPrinter("YSS PDF Converter XP");

	// 変換前のタイムアウト秒数を設定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// setBeforeTimeoutSec(timeoutSec);
	// @param {Number} timeoutSec タイムアウト時間(秒) 0:タイムアウトしない(待ち続ける)
	pdfautoconverter.setBeforeTimeoutSec(0);

	// 変換後のタイムアウト秒数を設定します。
	// 本メソッドを指定した場合、setFolderNameで指定したフォルダ別設定は破棄されます。
	// setTimeoutSec(timeoutSec);
	// @param {Number} timeoutSec タイムアウト時間(秒) 0:タイムアウトしない(待ち続ける)
	pdfautoconverter.setTimeoutSec(0);

	// PDF変換サーバへのファイル転送のタイムアウトミリ秒を設定します。
	// setTransTimeoutMilliSec(timeoutMilliSec);
	// @param {Number} timeoutMilliSec タイムアウト時間(ミリ秒)
	pdfautoconverter.setTransTimeoutMilliSec(60 * 60 * 1000);

	// 対象ファイルをPDFに変換します。
	// convert(inFilePath, outFilePath);
	// @param {String} inFilePath 変換対象のファイルパス
	// @param {String} outFilePath 変換後の出力先PDFファイルパス
	// @return {String} 出力したPDFファイルパス
	return pdfautoconverter.convert(inFilePath, outFilePath);
}

注意

文字コードを UTF-8 にして保存してください。

注意

PDF変換処理であるIMPDFAutoConverter.convert(inFilePath, outFilePath)は、エラー発生時にExceptionをスローします。

エラー情報を取得するために、上記メソッドをtry-catch文で括ってください。

5.2.3. ルーティング設定ファイルの作成

ルーティング用の xml ( sample-pdfa.xml )を作成します。次のようにファイルのマッピング情報を記述します。

  • 認可の設定に当たる authz-default の mapper 属性には “welcome-all” を設定します。
  • URLの設定に当たる file-mapping には、 path 属性に画面のURLを、 page 属性に画面のファイルパスをそれぞれ設定します。

Resin の場合、作成した設定ファイルは< %RESIN_HOME%/webapps/{アプリケーション名}/WEB-INF/conf/routing-jssp-config >の配下に設置してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<routing-jssp-config
	xmlns="http://www.intra-mart.jp/router/routing-jssp-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.intra-mart.jp/router/routing-jssp-config ../../schema/routing-jssp-config.xsd ">

        <authz-default mapper="welcome-all" />
	<file-mapping path="pdfa/convert" page="pdfa/convert">
		<authz uri="service://pdfa/convert" action="execute" />
	</file-mapping>

</routing-jssp-config>

注意

文字コードを UTF-8 にして保存してください。

5.2.4. プログラムの登録

作成したhtmlファイルとjsファイルを環境に適用するため、 Web Application Server を再起動してください。

再起動後、プログラムを認可とメニューに設定します。

5.2.4.1. 認可設定

  1. テナント管理者でログインし、次のメニューを設定します。

  2. [テナント管理]-[認可]画面を開きます。

  3. [権限設定を開始する]ボタンを押下します。

    ../../_images/script_1.png
  4. [リソース]を選択し、[リソースの詳細を開く]押下します。

    ../../_images/script_2.png
  5. [配下にリソースを新規作成]を押下します。

    ../../_images/script_3.png
  6. リソースグループを作成します。

    ../../_images/script_4.png
  7. リソースグループ名に PDF変換サンプル を設定します。

    ../../_images/script_5.png
  8. リソースURIに service://pdfa/convert を設定します。

    ../../_images/script_6.png
  9. 作成したリソースグループで「認証済みユーザ」に「全て許可」を付与します。

    ../../_images/script_7.png

5.2.4.2. メニュー設定

  1. テナント管理者でログインし、次のメニューを設定します。

  2. [テナント管理]-[メニュー]画面を開きます。

  3. フォルダを作成します。

    ../../_images/script_8.png
  4. 作成したフォルダの下にメニューアイテムを新規作成し、URLに pdfa/convert を設定します。

    ../../_images/script_9.png
  5. メニュー設定は完了です。

    ../../_images/script_10.png

5.2.5. プログラムの実行と確認

メニューで「 convert 」を選択することにより、作成した画面が表示されます。

画面上で変換対象ファイルをアップロードすることで、変換処理のプログラムが実行され、PDFに変換されたファイルがダウンロードされます。

PDFビューア( Adobe Acrobat Reader など)で変換後のファイルが正しく表示されることを確認し、このチュートリアルは完了です。