IM-PDFCoordinator for Accel Platform プログラミングガイド 第6版 2020-04-01

チュートリアル

前提条件

このチュートリアルでは、 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% と略します。

環境

チュートリアルを学ぶための環境です。
このドキュメント内では、ここで示す環境を前提として解説しています。

サーバ環境

intra-mart Accel Platform と IM-PDFCoordinator for Accel Platform が、正常にインストールされていることを前提とします。

SOAPサーバ(Windows / セキュリティ機能用) 環境

サーバには IM-PDFCoordinator for Accel Platform が正しくインストールされ、APIが正常に動作している状態であることが前提です。
サーバは Windows Server 2012 で動作しているものとして説明をします。
また、Java は Oracle JDK がインストールされているものとします。

準備

このドキュメントではC:¥temp をプログラム作成の作業領域として説明しています。
このフォルダが存在しない場合には、予め作成しておいてください。
別なフォルダで作業をする場合には、その環境に合わせてドキュメントを読みすすめてください。
プログラム作成には、テキストエディタが必要です。プログラム作成のできるテキストエディタをご用意下さい。

サンプルプログラムの場所(すべての機能)

%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では、年月日までしか指定できません。

プログラム実行

準備

実行させるための準備の手順を説明します。

サンプルファイルの用意

  1. intra-mart サーバが稼動中の場合は停止状態にします。
  2. 転送したクラスファイルをAppRuntime の動作するService-Platform をインストールしたディレクトリ内の doc/imart/WEB-INF/classes/myapp ディレクトリに保存してください。
  3. intra-mart サーバを起動します。

メニュー設定

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

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

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

    ../../_images/menu1.png
  4. URLに、protection.jsp を設定し、メニューを追加します。

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

    ../../_images/menu.png

プログラム実行

メニューで『protection』を選択してください。作成したJSPファイルが実行されます。
JSP の実行エラー(コンパイルエラー)になってしまった場合には、エラーメッセージの内容に従いJSP プログラムを修正してください。
JSP プログラムが正しく動作しているにも関わらず実行時エラーになってしまう場合は、エラーの内容にしたがって環境を正しく溝築してください(環境を変更した場合は、サーバの再起動が必要になる場合があります)。

確認

プログラムが正しく実行されると IM-PDFCoordinator for Accel Platform の C:/temp ディレクトリに out.pdf というファイル名のPDF ファイルが作成されます。
このファイルがPDFビューア(Adobe AcrobatReader など)で正しく表示できればすべての処理が正しく行われたことになります。