5.2. jsプログラムの作成(スクリプト開発モデル)¶
スクリプト開発モデルとして、HTML/JavaScriptのプログラムを作成します。
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. 認可設定¶
テナント管理者でログインし、次のメニューを設定します。
[テナント管理]-[認可]画面を開きます。
[権限設定を開始する]ボタンを押下します。
[リソース]を選択し、[リソースの詳細を開く]押下します。
[配下にリソースを新規作成]を押下します。
リソースグループを作成します。
リソースグループ名に PDF変換サンプル を設定します。
リソースURIに service://pdfa/convert を設定します。
作成したリソースグループで「認証済みユーザ」に「全て許可」を付与します。
5.2.4.2. メニュー設定¶
テナント管理者でログインし、次のメニューを設定します。
[テナント管理]-[メニュー]画面を開きます。
フォルダを作成します。
作成したフォルダの下にメニューアイテムを新規作成し、URLに pdfa/convert を設定します。
メニュー設定は完了です。
5.2.5. プログラムの実行と確認¶
メニューで「 convert 」を選択することにより、作成した画面が表示されます。
画面上で変換対象ファイルをアップロードすることで、変換処理のプログラムが実行され、PDFに変換されたファイルがダウンロードされます。
PDFビューア( Adobe Acrobat Reader など)で変換後のファイルが正しく表示されることを確認し、このチュートリアルは完了です。