チュートリアル¶
目次
前提条件¶
このチュートリアルでは、 JavaEE開発モデル におけるプログラミングの方法について説明します。このチュートリアルでは、セキュリティ機能(利用するAPI は jp.co.iothe.pdfprotection パッケージ)のサンプルを作成します。このチュートリアルで作成したプログラムは、C:/temp/sample.pdf ファイルをサンプルデータとして利用しますので、サンプルデータを作成してください。このチュートリアルで作成したプログラムは、C:/temp ディレクトリにPDF ファイルを作成します。
用語解説¶
Resin をインストールしたディレクトリを %RESIN_HOME% と略します。 Apache HTTP Server をインストールしたディレクトリを %APACHE_HOME% と略します。 Storage として使用するディレクトリを %PUBLIC_STORAGE_PATH% と略します。 Webサーバ利用時の静的コンテンツを配置するディレクトリを %WEB_PATH% と略します。s PDFメイクアップ をインストールしたディレクトリを %PDFMAKEUP% と略します。
環境¶
チュートリアルを学ぶための環境です。このドキュメント内では、ここで示す環境を前提として解説しています。
SOAPサーバ(Windows / セキュリティ機能用) 環境¶
サーバには IM-PDFCoordinator for Accel Platform が正しくインストールされ、APIが正常に動作している状態であることが前提です。サーバは Windows Server 2012 で動作しているものとして説明をします。また、Java は Oracle JDK がインストールされているものとします。
サンプルプログラムの場所(すべての機能)¶
%PDFMAKEUP%/sample/javaに機能毎のサンプルプログラムを用意しておりますので参照してください。機能別フォルダ一覧表( %PDFMAKEUP%/sample/java 直下のフォルダ群 )
No. 機能 サンプルフォルダ 1 保存場所制限 下記JSPプログラムを参照してください。 2 閲覧期限制御 下記JSPプログラムを参照してください。 3 パスワード付与 /samplesetproperty 4 パスワード解除 /samplesetproperty 5 PDFファイルの重ね合わせ /samplemerge 6 PDFファイルにすかしを挿入 /sampletrans 7 用紙サイズの変更 /sampleedit 8 PDFファイルの結合 /samplecomb 9 PDFファイルの抽出・分割 /sampleextractpage、/samplediv 10 PDFファイルの回転 /samplediv 11 PDFファイルへの印鑑付与 /sampleiod、/sampletrans 12 PDFファイルへの文字・画像付与 /sampletrans 13 PDFファイルへのしおり・リンク付与 /sampleol 14 PDFファイルへのフォーム、注釈付与 /sampleform、/samplenote 15 PDFファイルへのJavaScript挿入 /sample1
サンプルデータの用意¶
%PDFMAKEUP%/sample/dataに機能に合わせてサンプルデータを用意しておりますので参照してください。
JSPプログラムの作成(セキュリティAPI)¶
このサンプルでは、JSPから IM-PDFCoordinator for Accel Platform の セキュリティ機能 を呼び出します。テキストエディタを起動して、以下のプログラムを記述します。この時、ファイル名の大文字・小文字は厳密な意味を持ちますので、注意してください。作成した JSPファイルは、以下のフォルダに保存してください。
ファイル名 保存場所 protection.jsp %RESIN_HOME%/webapps/{アプリケーション名}/
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 | <%@ 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="jp.co.iothe.pdfprotection.PdfProtection" %>
<%@ page import="jp.co.iothe.pdfprotection.PdfProtectionException" %>
<%@ page import="jp.co.iothe.pdfprotection.PdfProtectionFactory" %>
<%
String src = "C:/temp/sample.pdf";
String pdf = "C:/temp/out.pdf";
String outpdf = "";
String message = "";
PdfProtection protection ;
int sts ;
String docinfname ;
// セキュリティ強化APIのインスタンスを生成します
// 設定ファイルに従ってリモートまたは直接使用のインスタンスを生成します
protection = PdfProtectionFactory.createPdfProtection();
// 文書情報を設定します
// このメソッドを実行しなかった場合、文書情報はすべて空になります
protection.setDocInfo(
"タイトル",
"サブタイトル",
"作成者",
"アプリケーション",
"キーワード"
);
// 標準セキュリティを設定します
// RC4-128ビットとAES128ビットのセキュリティはどちらか片方しか付与されません(最後に実行した方が有効)
// このメソッドを実行しなかった場合、標準セキュリティは付与されません
if( true ) {
System.out.println("RC4-128ビットのセキュリティ");
// RC4-128ビットのセキュリティを設定します
protection.setSecurity128("open", "security",
PdfProtection.SEC128PRINT_DISABLE,
PdfProtection.SEC128ACC_DISABLE,
PdfProtection.SEC128COPY_DISABLE,
PdfProtection.SEC128DOCCHANGE_DISABLE);
}
else {
System.out.println(" AES128ビットのセキュリティ");
// AES128ビットのセキュリティを設定します
protection.setSecurityAES128("open", "security",
PdfProtection.SEC128PRINT_DISABLE,
PdfProtection.SEC128ACC_DISABLE,
PdfProtection.SEC128COPY_DISABLE,
PdfProtection.SEC128DOCCHANGE_DISABLE);
}
// URLのセキュリティを設定します
// ワイルドカード「*」が使用できます
// このセキュリティを使用する場合、標準セキュリティで転載と文書変更を許可しないよう設定してください
// このメソッドを実行しなかった場合、URLのセキュリティは付与されません
String[] url = {"/C/temp/*", "http://localhost/*.pdf"};
for(int i = 0; i < url.length; i++){
System.out.println("url = " + url[i]);
}
protection.setSecurityUrl(url, "alert url");
// 有効期間のセキュリティを設定
// fromとtoのどちらか片方だけ設定することもできます
// このセキュリティを使用する場合、標準セキュリティで転載と文書変更を許可しないよう設定してください
// このメソッドを実行しなかった場合、有効期間のセキュリティは付与されません
//
// setSecurityDateでは、年月日までしか指定できません。
// 時間を指定しても、エラーになることはありませんが、無視されます。
// 例)2013/05/30~2013/05/30の場合、2013/05/30中はPDFを見ることができます。
String datePattern = "yyyy/MM/dd";
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
Date fromDate = null;
Date toDate = null;
try {
fromDate = sdf.parse("2013/07/01");
toDate = sdf.parse("2013/08/31");
System.out.println(fromDate.toString());
System.out.println(toDate.toString());
}
catch (ParseException e) {
e.printStackTrace();
}
protection.setSecurityDate(null, toDate, "alert date");
// Webに最適化するかどうかを設定します
protection.setFastWebView(true);
// 上記で設定した情報を元にセキュリティを強化して新しいPDFを出力します
int result;
if (true) {
// 編集元PDFにセキュリティパスワードが設定されていない場合
result = protection.outputPdf(src, pdf);
}
else {
// 編集元PDFにセキュリティパスワードが設定されている場合
result = protection.outputPdf(src, "password", pdf);
}
// outputPdfで発生した例外を取得します
if (result < 0) {
PdfProtectionException exception = protection.getException();
message = exception.getMessage();
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 //EN">
<HTML>
<HEAD>
<TITLE>My sample</TITLE>
</HEAD>
<BODY bgcolor="WhiteSmoke">
<CENTER>
<%
if("".equals(message)){
out.println("<H1>SUCCESS!!</H1>");
out.println("<H2>" + pdf + "</H2>");
}
else{
out.println("<H1>FAILURE!!</H1>");
out.println("<H2>" + message + "</H2>");
}
%>
</H2>
</CENTER>
</BODY>
<HTML>
|
コラム
標準セキュリティはRC4-128ビットとAES128ビットのセキュリティはどちらか片方しか付与されません。 (最後に実行した方が有効になります。)
コラム
URLのセキュリティはワイルドカード「*」が使用できます。 このセキュリティを使用する場合、標準セキュリティで転載と文書変更を許可しないよう設定してください。
コラム
有効期限のセキュリティはfromとtoのどちらか片方だけ設定することもできます。 このセキュリティを使用する場合、標準セキュリティで転載と文書変更を許可しないよう設定してください。 setSecurityDateでは、年月日までしか指定できません。
プログラム実行¶
準備¶
実行させるための準備の手順を説明します。
サンプルファイルの用意¶
- intra-mart サーバが稼動中の場合は停止状態にします。
- 転送したクラスファイルをAppRuntime の動作するService-Platform をインストールしたディレクトリ内の doc/imart/WEB-INF/classes/myapp ディレクトリに保存してください。
- intra-mart サーバを起動します。