5.1. JSPプログラムの作成( JavaEE開発モデル )¶
JavaEE開発モデル として、JSPのプログラムを作成します。
目次
5.1.1. 準備¶
本チュートリアルを進めるにあたり、次の事前準備を行ってください。
IM-PDFCoordinator for Accel Platform のサンプルデータを投入してください。
サンプルデータを投入するには、 IM-PDFCoordinator for Accel Platform のセットアップ時、WARファイルを出力する際に「サンプルデータを含める」へのチェックが必要です。
投入手順については、「 intra-mart Accel Platform セットアップガイド 」-「 サンプルデータの投入 」を参照してください。
コラム
チュートリアルのプログラム内部で使用する マージ機能(Merge) ・ エディット機能(Edit) 用のPDFファイルや画像ファイルは、サンプルデータを投入することで設置されます。
本チュートリアルでは、 後述で作成する画面から処理対象ファイルをアップロードすることで処理を実行します。
処理対象のPDFファイルを用意してください。
5.1.2. JSPファイルの作成¶
テキストエディタを使用してJSPファイルを作成します。
Resin の場合、< %RESIN_HOME%/webapps/warファイルと同名のディレクトリ/WEB-INF/view/pdfc >の配下に、それぞれ次の名前でファイルを作成し、ソースを実装します。
機能 | jspファイル名 |
---|---|
ページ機能(Page) | combine.jsp
combine_act.jsp
|
マージ機能(Merge) | merge.jsp
merge_act.jsp
|
エディット機能(Edit) | edit.jsp
edit_act.jsp
|
注意
文字コードを UTF-8 にして保存してください。
コラム
RC4-40ビット、RC4-128ビット、および、AES128ビットのセキュリティは、いずれか一つのみ付与されます。
セキュリティ設定処理を複数実行した場合、最後に実行したセキュリティ設定が有効になります。
5.1.2.1. ページ機能(Page)¶
combine.jsp
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 <%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-combine</title> <script type="text/javascript"> $(function (){ $("#combine_submit").click(function() { if($("#comb_file_1_path").val().length == 0 || $("#comb_file_2_path").val().length == 0) { imuiAlert("ファイルを2つ選択してください。", "警告"); return; } $("#combine_form").submit(); }); }); </script> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル combine</h1> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>combine プログラム実行</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"> アップロードした2つのPDFファイルを結合し、結合後PDFをダウンロードします。<br> PDFファイルを2つ指定し、「PDF結合」ボタンを押下してください。 </p> </div> <form action="pdfc/javaee/combine_act" method="POST" id="combine_form" enctype="multipart/form-data"> <table class="imui-table"> <tbody> <tr> <th class="wd-225px">結合対象PDFファイル1</th> <td><input type="file" id="comb_file_1_path" name="comb_file_1_path"></td> </tr> <tr> <th class="wd-225px">結合対象PDFファイル2</th> <td><input type="file" id="comb_file_2_path" name="comb_file_2_path"></td> </tr> </tbody> </table> <div class="imui-operation-parts"> <imui:button value="PDF結合" class="imui-medium-button" id="combine_submit" /> </div> </form> </div> </div>
combine_act.jsp
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 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.Date" %> <%@ page import="java.text.ParseException" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="yss.pdfmakeup.pdfcombine" %> <%@ page import="java.nio.file.Path" %> <%@ page import="java.nio.file.Files" %> <%@ page import="jp.co.intra_mart.foundation.service.client.file.PublicStorage" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.util.ArrayList" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData.Entity" %> <%@ page import="java.nio.file.StandardCopyOption" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <% String message = ""; int resultCode = 0; String dirPath = "pdfc/tutorial"; ArrayList<Path> tempFiles = new ArrayList<Path>(); // 結合したPDFファイルの一時出力先を作成します。 Path tempOutputFile = Files.createTempFile("combineOut_", ".pdf"); tempFiles.add(tempOutputFile); // 出力するPDFファイルパスを作成します。 PublicStorage outputFile = new PublicStorage(dirPath + "/result/combine_" + session.getId() + ".pdf"); // リクエストからアップロードした情報を取得します。 MultipartFormData multipartFormData = new MultipartFormData(request); // 1つ目の結合ファイルを一時ファイルにコピーします。 Path combFile1Path = Files.createTempFile("combine1_", ".pdf"); tempFiles.add(combFile1Path); try (InputStream in = multipartFormData.getEntity("comb_file_1_path").getInputStream()) { Files.copy(in, combFile1Path, StandardCopyOption.REPLACE_EXISTING); } // 2つ目の結合ファイルを一時ファイルにコピーします。 Path combFile2Path = Files.createTempFile("combine2_", ".pdf"); tempFiles.add(combFile2Path); try (InputStream in = multipartFormData.getEntity("comb_file_2_path").getInputStream()) { Files.copy(in, combFile2Path, StandardCopyOption.REPLACE_EXISTING); } // IM-PDFCoordinatorを実行し、PDFファイルを結合します。 Result result = execPdfcoordinatorCombine(combFile1Path, combFile2Path, tempOutputFile); resultCode = result.code; message = result.message; if (resultCode == 0) { // 生成したPDFファイルをパブリックストレージへコピーします。 try (OutputStream os = outputFile.create()) { Files.copy(tempOutputFile, os); } } // 一時ファイルを削除します。 for (Path file : tempFiles) { if (Files.exists(file)) { Files.delete(file); } } %> <%! public static class Result { public int code; public String message; public Result(int code, String message) { this.code =code; this.message = message; } } public static Result execPdfcoordinatorCombine(Path combFile1Path, Path combFile2Path, Path outFilePath) { int sts = 0; // PDFをファイル単位で結合するクラスのインスタンスを生成します。 // @return {pdfcombine} PDFをファイル単位で結合するクラスのインスタンス pdfcombine comb = new pdfcombine(); if (comb == null) return new Result(-999, "did not create the object"); // エンコード文字列を指定します。 comb.m_encode = "MS932"; // 内部メンバの初期化等を行います。 // @returns {int} 正常時は0、エラー時は-1を返します。 sts = comb.init(); if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFの文書情報を設定します。 // setdocinfo(title, subTitle, creator, app, keyword); // @param {String} title タイトルに設定する文字列を指定します。 // @param {String} subtitle サブタイトルに設定する文字列を指定します。 // @param {String} creator 作成者に設定する文字列を指定します。 // @param {String} app 作成アプリケーションに設定する文字列を指定します。 // @param {String} keyword キーワードに設定する文字列を指定します。 sts = comb.setdocinfo("文書タイトル", "文書サブタイトル", "作成者", "作成アプリケーション名", "キーワード"); if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFのRC4 40ビットセキュリティを設定します。 // setsecurity(fromtop, showpasswd, securitypasswd, noprint, noedit, nocopy, noaddnote); // @param {boolean} fromtop 連結元の先頭のPDFを引継ぎます。 // @param {String} showpasswd 参照用のパスワードを指定します。 // @param {String} securitypasswd セキュリティ設定用のパスワードを指定します。 // @param {boolean} noprint 印刷(true:不可,false:可能) // @param {boolean} noedit 編集(true:不可,false:可能) // @param {boolean} nocopy 転載(true:不可,false:可能) // @param {boolean} noaddnote 注釈追加(true:不可,false:可能) // sts = comb.setsecurity(false, "open", "security", false, true, false, true); // if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFのRC4 128ビットセキュリティを設定します。 // setsecurity128(showpasswd, securitypasswd, print, access, copy, change); // @param {String} showpasswd 参照用のパスワードを指定します。 // @param {String} securitypasswd セキュリティ設定用のパスワードを指定します。 // @param {int} print 128bit security(印刷)を指定します。 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} access 128bit security(アクセス)を指定します。 // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 128bit security(転載)を指定します。 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 128bit security(文書変更)を指定します。 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = comb.setsecurity128("open", "security", comb.SEC128PRINT_DEGRADED, comb.SEC128ACC_ENABLE, comb.SEC128COPY_DISABLE, comb.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFのAES 128ビットセキュリティを設定します。 // setsecurityaes128(showpasswd, securitypasswd, print, access, copy, change); // @param {String} showpasswd 参照用のパスワードを指定します。 // @param {String} securitypasswd セキュリティ設定用のパスワードを指定します。 // @param {int} print 128bit security(印刷)を指定します。 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} access 128bit security(アクセス)を指定します。 // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 128bit security(転載)を指定します。 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 128bit security(文書変更)を指定します。 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = comb.setsecurityaes128("open", "security", comb.SEC128PRINT_DEGRADED, comb.SEC128ACC_ENABLE, comb.SEC128COPY_DISABLE, comb.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, comb.geterror()); // PDF出力後のWebに最適化の処理の有無を設定します。 // 特にこのメソッドを呼び出さない場合はデフォルトで最適化されます。 // setfastwebview(bfastwebview); // @param {boolean} bfastwebview true:最適化する,false:最適化しない sts = comb.setfastwebview(true); if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFをオープンし、連結の準備をします。 // open(outpdf); // @param {String} outpdf 出力先PDFのファイル名を指定します。 sts = comb.open(outFilePath.toString()); if (sts < 0) return new Result(sts, comb.geterror()); // 指定ファイルのPDF連結の準備をします。 // combine(pdf); // @param {String} pdf 連結するPDFのファイル名を指定します。 sts = comb.combine(combFile1Path.toString()); if (sts < 0) return new Result(sts, comb.geterror()); sts = comb.combine(combFile2Path.toString()); if (sts < 0) return new Result(sts, comb.geterror()); // 出力PDFを連結及びクローズし、連結を終了します。 sts = comb.close(); if (sts < 0) return new Result(sts, comb.geterror()); // 内部のハンドルを開放します。 comb.release(); return new Result(sts, "Success !!"); } %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-combine</title> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル combine</h1> </div> <div class="imui-toolbar-wrap"> <div class="imui-toolbar-inner"> <ul class="imui-list-toolbar"> <li><a href="javascript:history.back()" class="imui-toolbar-icon" title="戻る"> <span class="im-ui-icon-common-16-back"></span></a></li> </ul> </div> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>実行結果</h2></div> <form action="pdfc/outfile" method="POST"> <table class="imui-table"> <tbody> <tr> <th class="wd-20">出力PDFファイル</th> <td>%PUBLIC_STORAGE_PATH%/<%= outputFile.getPath() %></td> </tr> <tr> <th>戻り値</th> <td><%= resultCode %></td> </tr> <tr> <th>メッセージ</th> <td><%= message %></td> </tr> </tbody> </table> <% if(resultCode == 0) { %> <div class="imui-operation-parts"> <imui:button value="ダウンロード" class="imui-medium-button" onClick="form.submit()" /> <input type="hidden" name="downloadFile" value="<%= outputFile.getPath() %>" /> </div> <% } %> </form> </div>
5.1.2.2. マージ機能(Merge)¶
merge.jsp
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 <%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-merge</title> <script type="text/javascript"> $(function (){ $("#merge_submit").click(function() { if($("#src_file_path").val().length == 0) { imuiAlert("PDFファイルを選択してください。", "警告"); return; } $("#merge_form").submit(); }); }); </script> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル merge</h1> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>merge プログラム実行</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ファイルを重ね合わせ、処理後PDFファイルをダウンロードします。<br> 印影が記載されたPDFファイルのサイズ関係上、A4サイズ以上のPDFファイルを指定し、「PDF重ね合わせ」ボタンを押下してください。 </p> </div> <form action="pdfc/javaee/merge_act" method="POST" id="merge_form" enctype="multipart/form-data"> <table class="imui-table"> <tbody> <tr> <th class="wd-225px">重ね合わせ対象PDFファイル</th> <td><input type="file" id="src_file_path" name="src_file_path"></td> </tr> </tbody> </table> <div class="imui-operation-parts"> <imui:button value="PDF重ね合わせ" class="imui-medium-button" id="merge_submit"></imart> </div> </form> </div> </div>
merge_act.jsp
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 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.Date" %> <%@ page import="java.text.ParseException" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="yss.pdfmakeup.pmumerge" %> <%@ page import="yss.pdfmakeup.pmumergesrc" %> <%@ page import="java.nio.file.Path" %> <%@ page import="java.nio.file.Files" %> <%@ page import="jp.co.intra_mart.foundation.service.client.file.PublicStorage" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.util.ArrayList" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData.Entity" %> <%@ page import="java.nio.file.StandardCopyOption" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <% String message = ""; int resultCode = 0; String dirPath = "pdfc/tutorial"; String stampFilePath = dirPath + "/stamp.pdf"; ArrayList<Path> tempFiles = new ArrayList<Path>(); // 結合したPDFファイルの一時出力先を作成します。 Path tempOutputFile = Files.createTempFile("mergeOut_", ".pdf"); tempFiles.add(tempOutputFile); // 出力するPDFファイルパスを作成します。 PublicStorage outputFile = new PublicStorage(dirPath + "/result/merge_" + session.getId() + ".pdf"); // リクエストからアップロードした情報を取得します。 MultipartFormData multipartFormData = new MultipartFormData(request); // アップロードされたファイルを一時ファイルにコピーします。 Path srcFilePath = Files.createTempFile("src_", ".pdf"); tempFiles.add(srcFilePath); try (InputStream in = multipartFormData.getEntity("src_file_path").getInputStream()) { Files.copy(in, srcFilePath, StandardCopyOption.REPLACE_EXISTING); } // 印影PDFファイルを一時ファイルにコピーします。 Path tempStampFilePath = Files.createTempFile("stamp_", ".pdf"); tempFiles.add(tempStampFilePath); try (InputStream in = new PublicStorage(stampFilePath).open()) { Files.copy(in, tempStampFilePath, StandardCopyOption.REPLACE_EXISTING); } // IM-PDFCoordinatorを実行し、PDFファイルに印影を重ね合わせます。 Result result = execPdfcoordinatorMerge(srcFilePath, tempStampFilePath, tempOutputFile); resultCode = result.code; message = result.message; if (resultCode == 0) { // 生成したPDFファイルをパブリックストレージへコピーします。 try (OutputStream os = outputFile.create()) { Files.copy(tempOutputFile, os); } } // 一時ファイルを削除します。 for (Path file : tempFiles) { if (Files.exists(file)) { Files.delete(file); } } %> <%! public static class Result { public int code; public String message; public Result(int code, String message) { this.code =code; this.message = message; } } public static Result execPdfcoordinatorMerge(Path srcFilePath, Path stampFilePath, Path outFilePath) { int sts = 0; // PDFマージクラスのインスタンスを生成します。 // @return {pmumerge} PDFマージクラスのインスタンス pmumerge merge = new pmumerge(); if (merge == null) return new Result(-999, "did not create the object"); // エンコード文字列を指定します。 merge.m_encode = "MS932"; // 内部メンバの初期化等を行います。環境ファイルパスを指定できます。 // @param {String} [etcpath] 環境ファイルパス // @returns {int} 正常時は0、エラー時は-1を返します。 sts = merge.init(null); if (sts < 0) return new Result(sts, merge.geterror()); // 出力PDFの文書情報を設定します。 // setdocinfo(title, subTitle, creator, app, keyword); // @param {String} title タイトルに設定する文字列を指定します。 // @param {String} subtitle サブタイトルに設定する文字列を指定します。 // @param {String} creator 作成者に設定する文字列を指定します。 // @param {String} app 作成アプリケーションに設定する文字列を指定します。 // @param {String} keyword キーワードに設定する文字列を指定します。 sts = merge.setdocinfo("文書タイトル", "文書サブタイトル", "作成者", "作成アプリケーション名", "キーワード"); if (sts < 0) return new Result(sts, merge.geterror()); // PDF出力時に設定するRC4 40ビットセキュリティ情報を指定します。 // setsecurity(openpassword, securitypassword, noprint, noedit, nocopy, noaddnote); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {boolean} noprint 印刷を許可しない。 // @param {boolean} noedit 編集を許可しない。 // @param {boolean} nocopy 転載を許可しない。 // @param {boolean} noaddnote 注釈追加を許可しない。 // sts = merge.setsecurity(false, "open", "security", false, true, false, true); // if (sts < 0) return new Result(sts, merge.geterror()); // PDF出力時に設定するRC4 128ビットセキュリティ情報を指定します。 // setsecurity128(openpassword, securitypassword, print, acc, copy, change); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {int} print 印刷 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} acc アクセス // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 転載 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 文書変更 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = merge.setsecurity128("open", "security", merge.SEC128PRINT_DEGRADED, merge.SEC128ACC_ENABLE, merge.SEC128COPY_DISABLE, merge.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, merge.geterror()); // PDF出力時に設定するAES 128ビットセキュリティ情報を指定します。 // setsecurityaes128(openpassword, securitypassword, print, acc, copy, change); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {int} print 印刷 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} acc アクセス // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 転載 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 文書変更 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = merge.setsecurityaes128("open", "security", merge.SEC128PRINT_DEGRADED, merge.SEC128ACC_ENABLE, merge.SEC128COPY_DISABLE, merge.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, merge.geterror()); // PDF出力後のWebに最適化の処理の有無を設定します。 // 特にこのメソッドを呼び出さない場合はデフォルトで最適化されます。 // setfastwebview(bfastwebview); // @param {boolean} bfastwebview true:最適化する,false:最適化しない sts = merge.setfastwebview(true); if (sts < 0) return new Result(sts, merge.geterror()); // マージの基本になるPDFをオープンします。 // openbase(filename, passwd); // @param {String} filename ファイル名 // @param {String} passwd パスワード // @returns {pmumergesrc} マージ処理の基本PDFのpmumergesrcクラス。 // エラーの場合はnull。 pmumergesrc srcBase = merge.openbase(srcFilePath.toString(), null); if (srcBase == null) return new Result(-999, "did not create the object"); // pmumerge.outpage()によるマージ時の上下関係を設定します。 // setorder(order); // @param {int} order 任意の数値を指定します。 // 0が一番下になります。 // 0以下は0と見なされます。 sts = srcBase.setorder(0); if (sts < 0) return new Result(sts, srcBase.geterror()); // マージするPDFをオープンします。 // openmerge(filename, passwd); // @param {String} filename ファイル名 // @param {String} passwd パスワード // @returns {pmumergesrc} マージ処理のマージするPDFのpmumergesrcクラス。 // エラーの場合はnull。 pmumergesrc srcMerge = merge.openmerge(stampFilePath.toString(), null); if (srcMerge == null) return new Result(-999, "did not create the object"); // pmumerge.outpage()によるマージ時の上下関係を設定します。 // setorder(order); // @param {int} order 任意の数値を指定します。 // 0が一番下になります。 // 0以下は0と見なされます。 sts = srcMerge.setorder(99); if (sts < 0) return new Result(sts, srcMerge.geterror()); // pmumerge.outpage()によるマージ時の原点位置を設定します。 // setorigin(origin); // @param {String} origin 以下の追記オブジェクトの基本位置を指定します。 // ORIGIN_LT:左上 // ORIGIN_LM:左中段 // ORIGIN_LB:左下 // ORIGIN_CT:中央上 // ORIGIN_CM:中央中段 // ORIGIN_CB:中央下 // ORIGIN_RT:右上 // ORIGIN_RM:右中段 // ORIGIN_RB:右下 sts = srcMerge.setorigin(srcMerge.ORIGIN_CM); if (sts < 0) return new Result(sts, srcMerge.geterror()); // どのレイヤに含めるかを設定します。 // setlayer(layer); // @param {pmuobjlayer} layer pmumerge.createlayer()で作成したインスタンスを指定します。 // レイヤ指定を無効にするにはnullを指定します。 sts = srcMerge.setlayer(null); if (sts < 0) return new Result(sts, srcMerge.geterror()); // 出力PDFをオープンします。 // openoutput(filename); // @param {String} filename ファイル名 sts = merge.openoutput(outFilePath.toString()); if (sts < 0) return new Result(sts, merge.geterror()); // オープンした切出し元のPDFのページ数を返します。 // @returns {int} オープンした切出し元のPDFのページ数 int basePageCount = srcBase.getpagecount(); if (basePageCount < 0) return new Result(basePageCount, srcBase.geterror()); for(int i = 0; i < basePageCount; i++) { // pmumerge.outpage()によるマージ対象のページを設定します。 // setpage(page); // @param {int} page pmumerge.outpage()が出力する、対象になるページを指定します(1以上の値)。 // 存在しないページ番号を指定した場合は、マージ対象になりません。 // また、基本PDFは、ページの順序、スキップ、削除はできません。 // @returns {int} 0:マージするPDFに、無効なページ番号を指定した。 // 1:マージするPDFに、有効なページ番号を指定した。 // 2:基本PDFに正しいページ番号を指定した。 // 3:基本PDFに正しくない(現在ページ以外)のページ番号を指定した。 sts = srcMerge.setpage(1); if (sts < 0) return new Result(sts, srcMerge.geterror()); // マージしてページを出力します。 sts = merge.outpage(); if (sts < 0) return new Result(sts, merge.geterror()); } // マージ用にオープンされている出力ファイルをクローズします。 // また、pmumerge.outpage()呼び出しが、基本PDFの途中のページで打ち切られた場合は、残りのページも出力してからクローズします。 sts = merge.closeoutput(); if (sts < 0) return new Result(sts, merge.geterror()); // 内部のハンドルを開放します。 merge.release(); return new Result(sts, "Success !!"); } %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-merge</title> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル merge</h1> </div> <div class="imui-toolbar-wrap"> <div class="imui-toolbar-inner"> <ul class="imui-list-toolbar"> <li><a href="javascript:history.back()" class="imui-toolbar-icon" title="戻る"> <span class="im-ui-icon-common-16-back"></span></a></li> </ul> </div> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>実行結果</h2></div> <form action="pdfc/outfile" method="POST"> <table class="imui-table"> <tbody> <tr> <th class="wd-20">出力PDFファイル</th> <td>%PUBLIC_STORAGE_PATH%/<%= outputFile.getPath() %></td> </tr> <tr> <th>戻り値</th> <td><%= resultCode %></td> </tr> <tr> <th>メッセージ</th> <td><%= message %></td> </tr> </tbody> </table> <% if(resultCode == 0) { %> <div class="imui-operation-parts"> <imui:button value="ダウンロード" class="imui-medium-button" onClick="form.submit()" /> <input type="hidden" name="downloadFile" value="<%= outputFile.getPath() %>" /> </div> <% } %> </form> </div>
5.1.2.3. エディット機能(Edit)¶
edit.jsp
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 <%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-edit</title> <script type="text/javascript"> $(function (){ $("#edit_submit").click(function() { if($("#src_file_path").val().length == 0) { imuiAlert("PDFファイルを選択してください。", "警告"); return; } $("#edit_form").submit(); }); }); </script> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル edit</h1> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>edit プログラム実行</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追記」ボタンを押下してください。 </p> </div> <form action="pdfc/javaee/edit_act" method="POST" id="edit_form" enctype="multipart/form-data"> <table class="imui-table"> <tbody> <tr> <th class="wd-225px">追記対象PDFファイル</th> <td><input type="file" id="src_file_path" name="src_file_path"></td> </tr> </tbody> </table> <div class="imui-operation-parts"> <imui:button value="PDF追記" class="imui-medium-button" id="edit_submit" /> </div> </form> </div> </div>
edit_act.jsp
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 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.util.Date" %> <%@ page import="java.text.ParseException" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="yss.pdfmakeup.pmudst" %> <%@ page import="yss.pdfmakeup.pmuobjtext" %> <%@ page import="yss.pdfmakeup.pmuobjimage" %> <%@ page import="java.nio.file.Path" %> <%@ page import="java.nio.file.Files" %> <%@ page import="jp.co.intra_mart.foundation.service.client.file.PublicStorage" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.util.ArrayList" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData" %> <%@ page import="jp.co.intra_mart.common.aid.javaee.http.MultipartFormData.Entity" %> <%@ page import="java.nio.file.StandardCopyOption" %> <%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui" %> <% String message = ""; int resultCode = 0; String dirPath = "pdfc/tutorial"; String picFilePath = dirPath + "/bitmap.jpg"; ArrayList<Path> tempFiles = new ArrayList<Path>(); // 結合したPDFファイルの一時出力先を作成します。 Path tempOutputFile = Files.createTempFile("editOut_", ".pdf"); tempFiles.add(tempOutputFile); // 出力するPDFファイルパスを作成します。 PublicStorage outputFile = new PublicStorage(dirPath + "/result/edit_" + session.getId() + ".pdf"); // リクエストからアップロードした情報を取得します。 MultipartFormData multipartFormData = new MultipartFormData(request); // アップロードされたファイルを一時ファイルにコピーします。 Path srcFilePath = Files.createTempFile("src_", ".pdf"); tempFiles.add(srcFilePath); try (InputStream in = multipartFormData.getEntity("src_file_path").getInputStream()) { Files.copy(in, srcFilePath, StandardCopyOption.REPLACE_EXISTING); } // 画像ファイルを一時ファイルにコピーします。 Path tempPicFilePath = Files.createTempFile("pic_", ".jpg"); tempFiles.add(tempPicFilePath); try (InputStream in = new PublicStorage(picFilePath).open()) { Files.copy(in, tempPicFilePath, StandardCopyOption.REPLACE_EXISTING); } // IM-PDFCoordinatorを実行し、PDFファイルへ追記します。 Result result = execPdfcoordinatorEdit(srcFilePath, tempPicFilePath, tempOutputFile); resultCode = result.code; message = result.message; if (resultCode == 0) { // 生成したPDFファイルをパブリックストレージへコピーします。 try (OutputStream os = outputFile.create()) { Files.copy(tempOutputFile, os); } } // 一時ファイルを削除します。 for (Path file : tempFiles) { if (Files.exists(file)) { Files.delete(file); } } %> <%! public static class Result { public int code; public String message; public Result(int code, String message) { this.code =code; this.message = message; } } public static Result execPdfcoordinatorEdit(Path srcFilePath, Path picFilePath, Path outFilePath) { int sts = 0; Result result = null; // PDF出力制御クラスのインスタンスを生成します。 // @return {pmudst} PDF出力制御クラスのインスタンス pmudst dst = new pmudst(); if (dst == null) return new Result(-999, "did not create the object"); // エンコード文字列を指定します。 dst.m_encode = "MS932"; // 内部メンバの初期化等を行います。 // @returns {int} 正常時は0、エラー時は-1を返します。 sts = dst.init(); if (sts < 0) return new Result(sts, dst.geterror()); // 出力PDFの文書情報を設定します。 // setdocinfo(title, subTitle, creator, app, keyword); // @param {String} title タイトルに設定する文字列を指定します。 // @param {String} subtitle サブタイトルに設定する文字列を指定します。 // @param {String} creator 作成者に設定する文字列を指定します。 // @param {String} app 作成アプリケーションに設定する文字列を指定します。 // @param {String} keyword キーワードに設定する文字列を指定します。 sts = dst.setdocinfo("文書タイトル", "文書サブタイトル", "作成者", "作成アプリケーション名", "キーワード"); if (sts < 0) return new Result(sts, dst.geterror()); // PDF出力時に設定するRC4 40ビットセキュリティ情報を指定します。 // setsecurity(openpassword, securitypassword, noprint, noedit, nocopy, noaddnote); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {boolean} noprint 印刷を許可しない。 // @param {boolean} noedit 編集を許可しない。 // @param {boolean} nocopy 転載を許可しない。 // @param {boolean} noaddnote 注釈追加を許可しない。 // sts = dst.setsecurity(false, "open", "security", false, true, false, true); // if (sts < 0) return new Result(sts, dst.geterror()); // PDF出力時に設定するRC4 128ビットセキュリティ情報を指定します。 // setsecurity128(openpassword, securitypassword, print, acc, copy, change); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {int} print 印刷 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} acc アクセス // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 転載 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 文書変更 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = dst.setsecurity128("open", "security", dst.SEC128PRINT_DEGRADED, dst.SEC128ACC_ENABLE, dst.SEC128COPY_DISABLE, dst.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, dst.geterror()); // PDF出力時に設定するAES 128ビットセキュリティ情報を指定します。 // setsecurityaes128(openpassword, securitypassword, print, acc, copy, change); // @param {String} openpassword 参照用のパスワード // @param {String} securitypassword セキュリティ設定用のパスワード // @param {int} print 印刷 // SEC128PRINT_DISABLE:許可しない // SEC128PRINT_DEGRADED:低解像度で許可する // SEC128PRINT_ENABLE:許可する // @param {int} acc アクセス // SEC128ACC_DISABLE:許可しない // SEC128ACC_ENABLE:許可する // @param {int} copy 転載 // SEC128COPY_DISABLE:許可しない // SEC128COPY_ENABLE:許可する // @param {int} change 文書変更 // SEC128DOCCHANGE_DISABLE:許可しない // SEC128DOCCHANGE_ASSEMBLE:アセンブリを許可する // SEC128DOCCHANGE_FORMFILL:フォーム入力を許可する // SEC128DOCCHANGE_ADDNOTE:フォーム入力と注釈追加を許可する // SEC128DOCCHANGE_ENABLE:許可する // sts = dst.setsecurityaes128("open", "security", dst.SEC128PRINT_DEGRADED, dst.SEC128ACC_ENABLE, dst.SEC128COPY_DISABLE, dst.SEC128DOCCHANGE_ADDNOTE); // if (sts < 0) return new Result(sts, dst.geterror()); // PDF出力後のWebに最適化の処理の有無を設定します。 // 特にこのメソッドを呼び出さない場合はデフォルトで最適化されます。 // setfastwebview(bfastwebview); // @param {boolean} bfastwebview true:最適化する,false:最適化しない sts = dst.setfastwebview(true); if (sts < 0) return new Result(sts, dst.geterror()); // 指定された切出し元のPDFの全てのページを出力時の対象とします。 // addsrcfile(filename, passwd); // @param {String} filename 切出し元のPDFのファイル名 // @param {String} passwd 切出し元のPDFのパスワード // @returns {int} 切出し元のPDFファイルのページ数を返します。 sts = dst.addsrcfile(srcFilePath.toString(), null); if (sts < 0) return new Result(sts, dst.geterror()); result = addtext(dst); if (result.code < 0) return result; result = addimage(dst, picFilePath); if (result.code < 0) return result; // 指定された切出し元のPDF、及び、追記オブジェクトを指定されたファイルにPDF出力します。 // outputpdf(filename); // @param {String} filename 出力先のPDFファイルのファイル名 sts = dst.outputpdf(outFilePath.toString()); if (sts < 0) return new Result(sts, dst.geterror()); // 内部のハンドルを開放します。 dst.release(); return new Result(sts, "Success !!"); } public static Result addtext(pmudst dst) { int sts = 0; // PDF出力時に追記するテキスト枠オブジェクトクラスを作成します。 // @returns {pmuobjtext} テキスト枠オブジェクトクラス pmuobjtext text = dst.createobjtext(); if (text == null) return new Result(-999, "did not create the object"); text.m_encode = "MS932"; // オブジェクトの基本位置を指定します。 // setbasepos(postype); // @param {int} postype 以下の追記オブジェクトの基本位置を指定します。 // POS_XY:XYを使用 // POS_LT:左上 // POS_LM:左中段 // POS_LB:左下 // POS_CT:中央上 // POS_CM:中央中段 // POS_CB:中央下 // POS_RT:右上 // POS_RM:右中段 // POS_RB:右下 sts = text.setbasepos(text.POS_LT); if (sts < 0) return new Result(sts, text.geterror()); // 追記オブジェクトをオリジナルPDFの上または下のどちらに追記するかを設定します。 // setlayer(layertype); // @param {int} layertype 以下の追記位置を設定します。 // LAYER_FRONT:追記オブジェクトをオリジナルの上(前面)に配置 // LAYER_BACK:追記オブジェクトをオリジナルの下(背面)に配置 sts = text.setlayer(text.LAYER_FRONT); if (sts < 0) return new Result(sts, text.geterror()); // オブジェクトをどのページにするかを設定します。 // settargetpage(pagetype, pageno1, pageno2) // ページ番号を指定する際は、1ページ目を「1」として指定してください。 // @param {int} pagetype 以下のページ指定の種類を指定します。 // PAGETYPE_ALL:全てのページ // PAGETYPE_FROM:指定ページ以降 // PAGETYPE_FROMTO:範囲指定 // PAGETYPE_PAGE:特定のページ // PAGETYPE_TO:指定ページまで // @param {int} pageno1 ページ番号1 // @param {int} pageno2 ページ番号2(FROMTOの場合のみ使用) sts = text.settargetpage(text.PAGETYPE_PAGE, 1, 0); if (sts < 0) return new Result(sts, text.geterror()); // 追記オブジェクトが使用するフォントのサイズを設定します。 // setfontsize(fontsize); // @param {double} fontsize フォントのサイズ sts = text.setfontsize(32.0); if (sts < 0) return new Result(sts, text.geterror()); // 追記オブジェクトが使用するフォントの色をRGBで設定します。 // setfontcolor(r, g, b); // @param {int} r 赤値 // @param {int} g 緑値 // @param {int} b 青値 sts = text.setfontcolor(255, 0, 0); if (sts < 0) return new Result(sts, text.geterror()); // テキストオブジェクトの文字列を設定します。 // setstring(str); // @param {String} str 文字列 sts = text.setstring("文字列追記テスト1"); if (sts < 0) return new Result(sts, text.geterror()); // テキストオブジェクトの枠線の種類を設定します。 // setbordertype(bordertype); // @param {int} bordertype 以下の枠線の種類を指定します。 // BORDER_AUTONEWLINE:自動改行 // BORDER_BORDERFITSTRING:枠をテキストに合せる // BORDER_NONAUTONEWLINE:調節なし // BORDER_STRINGFITBORDER:テキストを枠に合せる sts = text.setbordertype(text.BORDER_BORDERFITSTRING); if (sts < 0) return new Result(sts, text.geterror()); return new Result(sts, "Success !!"); } public static Result addimage(pmudst dst, Path picFilePath) { int sts = 0; // PDF出力時に追記するイメージオブジェクトクラスを作成します。 // @returns {pmuobjimage} イメージオブジェクトクラス pmuobjimage objimg = dst.createobjimage(); if (objimg == null) return new Result(sts, objimg.geterror()); // オブジェクトの基本位置を指定します。 // setbasepos(postype); // @param {int} postype 以下の追記オブジェクトの基本位置を指定します。 // POS_XY:XYを使用 // POS_LT:左上 // POS_LM:左中段 // POS_LB:左下 // POS_CT:中央上 // POS_CM:中央中段 // POS_CB:中央下 // POS_RT:右上 // POS_RM:右中段 // POS_RB:右下 sts = objimg.setbasepos(objimg.POS_CM); if (sts < 0) return new Result(sts, objimg.geterror()); // 追記オブジェクトをオリジナルPDFの上または下のどちらに追記するかを設定します。 // setlayer(layertype); // @param {int} layertype 以下の追記位置を設定します。 // LAYER_FRONT:追記オブジェクトをオリジナルの上(前面)に配置 // LAYER_BACK:追記オブジェクトをオリジナルの下(背面)に配置 sts = objimg.setlayer(objimg.LAYER_BACK); if (sts < 0) return new Result(sts, objimg.geterror()); // オブジェクトをどのページにするかを設定します。 // settargetpage(pagetype, pageno1, pageno2) // ページ番号を指定する際は、1ページ目を「1」として指定してください。 // @param {int} pagetype 以下のページ指定の種類を指定します。 // PAGETYPE_ALL:全てのページ // PAGETYPE_FROM:指定ページ以降 // PAGETYPE_FROMTO:範囲指定 // PAGETYPE_PAGE:特定のページ // PAGETYPE_TO:指定ページまで // @param {int} pageno1 ページ番号1 // @param {int} pageno2 ページ番号2(FROMTOの場合のみ使用) sts = objimg.settargetpage(objimg.PAGETYPE_ALL, 0, 0); if (sts < 0) return new Result(sts, objimg.geterror()); // イメージオブジェクトの表示の大きさを指定します。 // setsize(option, width, height); // @param {int} option 以下のサイズ指定方法のオプションを指定します。 // IMGWH_SIZE:イメージのサイズのまま // IMGWH_WH:指定されたボックスの幅高さ // IMGWH_LT:原寸の比率固定(左上段) // IMGWH_LM:原寸の比率固定(左中段) // IMGWH_LB:原寸の比率固定(左下段) // IMGWH_CT:原寸の比率固定(中央上段) // IMGWH_CM:原寸の比率固定(中央中段) // IMGWH_CB:原寸の比率固定(中央下段) // IMGWH_RT:原寸の比率固定(右上段) // IMGWH_RM:原寸の比率固定(右中段) // IMGWH_RB:原寸の比率固定(右下段) // 比率固定を指定した場合、以下のように表示されます。 // ・原寸に対して、ボックスが縦長の場合: // widthの値を基準とし、画像の高さを調整。 // 調整後、ボックスに対して上段、中段、下段揃えで表示。 // ・原寸に対して、ボックスが横長の場合: // heightの値を基準とし、画像の幅を調整。 // 調整後、ボックスに対して左、中央、右揃えで表示。 // @param {double} width 幅 // @param {double} height 高さ sts = objimg.setsize(objimg.IMGWH_SIZE, 255, 407); if (sts < 0) return new Result(sts, objimg.geterror()); // イメージオブジェクトのファイル名を設定します。 // setfilename(imgtype, filename); // @param {int} imgtype 以下のイメージファイルの種類を指定します。 // IMGTYPE_BMP:Windows BMP // IMGTYPE_JPG:JPG // IMGTYPE_PNG:PNG // IMGTYPE_PNGALPHA:アルファチャンネルを持つPNG // IMGTYPE_TIFFG4:TIFF G4 // @param {String} filename イメージファイル名 sts = objimg.setfilename(objimg.IMGTYPE_JPG, picFilePath.toString()); if (sts < 0) return new Result(sts, objimg.geterror()); return new Result(sts, "Success !!"); } %> <imui:head> <title>IM-PDFCoordinator-チュートリアル-JavaEE開発モデル-edit</title> </imui:head> <div class="imui-title"> <h1>IM-PDFCoordinator チュートリアル JavaEE開発モデル edit</h1> </div> <div class="imui-toolbar-wrap"> <div class="imui-toolbar-inner"> <ul class="imui-list-toolbar"> <li><a href="javascript:history.back()" class="imui-toolbar-icon" title="戻る"> <span class="im-ui-icon-common-16-back"></span></a></li> </ul> </div> </div> <div class="imui-form-container"> <div class="imui-chapter-title"><h2>実行結果</h2></div> <form action="pdfc/outfile" method="POST"> <table class="imui-table"> <tbody> <tr> <th class="wd-20">出力PDFファイル</th> <td>%PUBLIC_STORAGE_PATH%/<%= outputFile.getPath() %></td> </tr> <tr> <th>戻り値</th> <td><%= resultCode %></td> </tr> <tr> <th>メッセージ</th> <td><%= message %></td> </tr> </tbody> </table> <% if(resultCode == 0) { %> <div class="imui-operation-parts"> <imui:button value="ダウンロード" class="imui-medium-button" onClick="form.submit()" /> <input type="hidden" name="downloadFile" value="<%= outputFile.getPath() %>" /> </div> <% } %> </form> </div>
5.1.3. ルーティング設定ファイルの作成¶
ルーティング用のxmlファイルを作成します。
Resin の場合、< %RESIN_HOME%/webapps/warファイルと同名のディレクトリ/WEB-INF/conf/routing-servlet-config >の配下に、それぞれ次の名前でファイルを作成します。
機能 | xmlファイル名 |
---|---|
ページ機能(Page) | sample-pdfc-javaee-combine.xml |
マージ機能(Merge) | sample-pdfc-javaee-merge.xml |
エディット機能(Edit) | sample-pdfc-javaee-edit.xml |
注意
文字コードを UTF-8 にして保存してください。
5.1.3.1. ページ機能(Page)¶
sample-pdfc-javaee-combine.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?>
<routing-servlet-config
xmlns="http://www.intra-mart.jp/router/routing-servlet-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/router/routing-servlet-config ../schema/routing-servlet-config.xsd ">
<servlet-mapping servlet="WEB-INF/view/pdfc/combine.jsp" path="pdfc/javaee/combine">
<authz uri="service://pdfc/javaee/combine" action="execute" />
</servlet-mapping>
<servlet-mapping servlet="WEB-INF/view/pdfc/combine_act.jsp" path="pdfc/javaee/combine_act">
<authz uri="service://pdfc/javaee/combine" action="execute" />
</servlet-mapping>
</routing-servlet-config>
|
5.1.3.2. マージ機能(Merge)¶
sample-pdfc-javaee-merge.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?>
<routing-servlet-config
xmlns="http://www.intra-mart.jp/router/routing-servlet-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/router/routing-servlet-config ../schema/routing-servlet-config.xsd ">
<servlet-mapping servlet="WEB-INF/view/pdfc/merge.jsp" path="pdfc/javaee/merge">
<authz uri="service://pdfc/javaee/merge" action="execute" />
</servlet-mapping>
<servlet-mapping servlet="WEB-INF/view/pdfc/merge_act.jsp" path="pdfc/javaee/merge_act">
<authz uri="service://pdfc/javaee/merge" action="execute" />
</servlet-mapping>
</routing-servlet-config>
|
5.1.3.3. エディット機能(Edit)¶
sample-pdfc-javaee-edit.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?>
<routing-servlet-config
xmlns="http://www.intra-mart.jp/router/routing-servlet-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intra-mart.jp/router/routing-servlet-config ../schema/routing-servlet-config.xsd ">
<servlet-mapping servlet="WEB-INF/view/pdfc/edit.jsp" path="pdfc/javaee/edit">
<authz uri="service://pdfc/javaee/edit" action="execute" />
</servlet-mapping>
<servlet-mapping servlet="WEB-INF/view/pdfc/edit_act.jsp" path="pdfc/javaee/edit_act">
<authz uri="service://pdfc/javaee/edit" action="execute" />
</servlet-mapping>
</routing-servlet-config>
|
5.1.4. プログラムの登録¶
作成したJSPファイルを環境に適用するため、 Web Application Server を再起動してください。
再起動後、プログラムを認可とメニューに設定します。
5.1.4.1. 認可設定¶
テナント管理者でログインし、次のメニューを設定します。
[テナント管理]-[認可]画面を開きます。
[権限設定を開始する]ボタンを押下します。
[リソース]を選択し、[リソースの詳細を開く]押下します。
[配下にリソースを新規作成]を押下します。
リソースグループを作成します。
リソースグループ名に、次の値を設定します。
機能 リソースグループ名 ページ機能(Page) JavaEE_PDF結合サンプル マージ機能(Merge) JavaEE_PDFマージサンプル エディット機能(Edit) JavaEE_PDF追記サンプル リソースURIに、次の値を設定します。
機能 リソースURI ページ機能(Page) service://pdfc/javaee/combine マージ機能(Merge) service://pdfc/javaee/merge エディット機能(Edit) service://pdfc/javaee/edit 作成したリソースグループで「認証済みユーザ」に「全て許可」を付与します。
5.1.5. プログラムの実行と確認¶
メニューで次のアイテムを選択することにより、作成した画面が表示されます。
機能 | メニューアイテム名 |
---|---|
ページ機能(Page) | JavaEE_combine |
マージ機能(Merge) | JavaEE_merge |
エディット機能(Edit) | JavaEE_edit |
画面上で処理対象ファイルをアップロードすることで、編集/加工処理のプログラムが実行され、処理されたPDFファイルがダウンロードされます。
PDFビューア( Adobe Acrobat Reader など)で処理後のファイルが正しく表示されることを確認し、このチュートリアルは完了です。
5.1.6. サンプルプログラムの場所¶
機能毎のサンプルプログラムを< %PDFMAKEUP%/sample/java >に用意しています。
使用用途に対応するフォルダの例は、次の通りです。
< %PDFMAKEUP%/sample/java >直下のフォルダ群
No. 用途 サンプルフォルダ 1 パスワード付与 /samplesetproperty 2 パスワード解除 /samplesetproperty 3 PDFファイルの 重ね合わせ /samplemerge 4 PDFファイルに 透かしの挿入 /sampletrans 5 用紙サイズの変更 /sampleedit 6 PDFファイルの 結合 /samplecomb 7 PDFファイルの 抽出・分割 /sampleextractpage、/samplediv 8 PDFファイルの 回転 /samplediv 9 PDFファイルへの 印影付与 /sampleiod、/sampletrans、/sample1 10 PDFファイルへの 文字・画像追記 /sampletrans、/sample1 11 PDFファイルへの しおり・リンク付与 /sampleol、/sample1 12 PDFファイルへの フォーム・注釈追加 /sampleform、/samplenote 13 PDFファイルへの JavaScriptの挿入 /sample1
コラム
機能に合わせて< %PDFMAKEUP%/sample/data >にサンプルデータを用意しています。
サンプルプログラムを実行する際に使用してください。