チュートリアル¶
目次
用語解説¶
Resin をインストールしたディレクトリを %RESIN_HOME% と略します。 Apache HTTP Server をインストールしたディレクトリを %APACHE_HOME% と略します。 Storage として使用するディレクトリを %PUBLIC_STORAGE_PATH% と略します。 Webサーバ利用時の静的コンテンツを配置するディレクトリを %WEB_PATH% と略します。s
環境¶
チュートリアルを学ぶための環境です。このドキュメント内では、ここで示す環境を前提として解説しています。
タイムスタンプ処理サーバ 環境¶
サーバには IM-PDFTimeStamper for Accel Platform が正しくインストールされ、APIが正常に動作している状態であることが前提です。サーバは WindowsServer2008 R2 で動作しているものとして説明をします。また、Java はOracle JDK がインストールされているものとします。
サンプルプログラムの場所¶
document/tutorial/PdfTimeStampSample.jspにサンプルプログラムを用意しておりますのでご覧ください。
サンプルデータの用意¶
C:\temp\in.pdf ファイルを用意ください。
JSPプログラムの作成¶
このサンプルでは、JSPから IM-PDFTimeStamper for Accel Platform の タイムスタンプ付与等の各機能を呼び出します。テキストエディタを起動して、以下のプログラムを記述します。この時、ファイル名の大文字・小文字は厳密な意味を持ちますので、注意してください。作成した JSPファイルは、以下のフォルダに保存してください。
ファイル名 保存場所 PdfTimeStampSample.jsp %RESIN_HOME%/webapps/{アプリケーション名}/PdfTimeStampSample.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="yss.iothe.pdftimestamp.PdfTimeStampException" %>
<%@ page import="yss.iothe.pdftimestamp.PdfTimeStampFactory" %>
<%@ page import="yss.iothe.pdftimestamp.PdfTimeStampService" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.HASH_ALGORITHM" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_128_ACCESSBILITY" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_128_CHANGE" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_128_COPY" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_128_PRINT" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_40_ADDNOTE" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_40_COPY" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_40_EDIT" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.PDF_SECURITY_40_PRINT" %>
<%@ page import="yss.iothe.pdftimestamp.com.PdfTimeStampConst.POLICY" %>
<%@ page import="yss.iothe.pdftimestamp.info.PdfDocument" %>
<%@ page import="yss.iothe.pdftimestamp.info.PdfTimeStamp" %>
<%@ page import="yss.iothe.pdftimestamp.info.PdfTimeStampToken" %>
<%@ page import="java.util.Date" %>
<%!
/**
* PDFタイムスタンプインスタンス生成
* URLが未指定であればスタンドアロン環境、
* URLが指定されていれば分散環境として処理を行う。
* URLは下記の形式で指定する。
* 「http://{IPアドレスおよびポート番号}/pdftimestamp/webapi/timestamp」
*/
private static PdfTimeStampService service = PdfTimeStampFactory.createPdfTimeStampService();
/*
private static PdfTimeStampService service = PdfTimeStampFactory.createPdfTimeStampService(
"http://xxxxxxxx:xxxx/pdftimestamp/webapi/timestamp", 30, 600);
*/
/*****************************************
* 処理ファイル設定
*****************************************/
/* 処理対象PDFファイルパス */
private static final String inputpdfpath = "C:/temp/in.pdf";
/* 処理対象PDF権限パスワード */
private static final String inputpdfpasswd = "security";
/* 処理結果PDF出力先ファイルパス1 */
private static final String outpdfpath1 = "C:/temp/out.1.pdf";
/* 処理結果PDF出力先ファイルパス2 */
private static final String outpdfpath2 = "C:/temp/out.2.pdf";
/*****************************************
* タイムスタンプトークン取得設定
*****************************************/
/* ハッシュアルゴリズム */
private static final HASH_ALGORITHM alg = HASH_ALGORITHM.SHA512;
/* ポリシー */
private static final POLICY policy = POLICY.TYPEA2;
/*****************************************
* タイムスタンプ局の設定
*****************************************/
/* タイムスタンプ局の接続先のURL */
private static final String tsaurl = "https://timestamp.seiko-cybertime.jp/basic/Timestamp?type=AccreditedA2";
/* タイムスタンプ局接続時の接続ID */
private static final String tsauser = "xxxxxxxx@xxxx.xx.xx";
/* タイムスタンプ局接続時のパスワード */
private static final String tsapasswd = "xxxxxxxx";
/*****************************************
* セキュリティ設定
*****************************************/
/* 処理結果PDFファイルに付与する参照パスワード */
private static final String openpasswd = "open";
/* 処理結果PDFファイルに付与するセキュリティパスワード */
private static final String secpasswd = "security";
/*****************************************
* 処理結果PDFファイルに付与する
* RC4 40bitセキュリティ設定
*****************************************/
/* 印刷許可 */
private static final PDF_SECURITY_40_PRINT security40_print = PDF_SECURITY_40_PRINT.DISABLE;
/* 編集許可 */
private static final PDF_SECURITY_40_EDIT security40_edit = PDF_SECURITY_40_EDIT.ENABLE;
/* コピー許可 */
private static final PDF_SECURITY_40_COPY security40_copy = PDF_SECURITY_40_COPY.DISABLE;
/* 注釈追記許可 */
private static final PDF_SECURITY_40_ADDNOTE security40_addnote = PDF_SECURITY_40_ADDNOTE.DISABLE;
/*****************************************
* 処理結果PDFファイルに付与する
* RC4 1280bitセキュリティ設定
*****************************************/
/* 印刷許可 */
private static final PDF_SECURITY_128_PRINT security128_print = PDF_SECURITY_128_PRINT.ENABLE;
/* アクセス許可 */
private static final PDF_SECURITY_128_ACCESSBILITY security128_access = PDF_SECURITY_128_ACCESSBILITY.ENABLE;
/* 印刷許可 */
private static final PDF_SECURITY_128_COPY security128_copy = PDF_SECURITY_128_COPY.ENABLE;
/* 文書変更許可 */
private static final PDF_SECURITY_128_CHANGE security128_change = PDF_SECURITY_128_CHANGE.ENABLE;
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>IM-PDFTimeStamperサンプル</title>
</head>
<body>
<DIV align="center" style="center; padding-top: 25px;">
<TABLE border="1">
<TR>
<TH align="center" style="padding: 5px 10px;" nowrap>文書タイムスタンプ付与</TH>
</TR>
<TR>
<TD align="left" style="padding: 5px 10px;" nowrap><%= addTimestamp() %></TD>
</TR>
</TABLE>
</DIV>
<DIV align="center" style="center; padding-top: 25px;">
<TABLE border="1">
<TR>
<TH align="center" style="padding: 5px 10px;" nowrap>延長タイムスタンプ付与</TH>
</TR>
<TR>
<TD align="left" style="padding: 5px 10px;" nowrap><%= extendTimestamp() %></TD>
</TR>
</TABLE>
</DIV>
<DIV align="center" style="center; padding-top: 25px;">
<TABLE border="1">
<TR>
<TH align="center" style="padding: 5px 10px;" nowrap>PDF文書のタイムスタンプ検証(validate)</TH>
</TR>
<TR>
<TD align="left" style="padding: 5px 10px;" nowrap><%= validateTimestamp() %></TD>
</TR>
</TABLE>
</DIV>
<DIV align="center" style="center; padding-top: 25px;">
<TABLE border="1">
<TR>
<TH align="center" style="padding: 5px 10px;" nowrap>PDF文書のタイムスタンプ検証(validateTs)</TH>
</TR>
<TR>
<TD align="left" style="padding: 5px 10px;" nowrap><%= validateTsTimestamp() %></TD>
</TR>
</TABLE>
</DIV>
<DIV align="center" style="center; padding-top: 25px;">
<TABLE border="1">
<TR>
<TH align="center" style="padding: 5px 10px;" nowrap>PDF文書の情報取得</TH>
</TR>
<TR>
<TD align="left" style="padding: 5px 10px;" nowrap><%= getInfo() %></TD>
</TR>
</TABLE>
</DIV>
<%!
/**
* 文書タイムスタンプの付与
*/
String addTimestamp() {
StringBuffer resultBuffer = new StringBuffer(200);
/* PDF情報 */
PdfDocument docinfo;
try {
/*****************************************
* 実行準備
*****************************************/
/* 文書タイムスタンプを付与するPDFファイルのパス、及び権限パスワードを設定 */
service.setInputPdf(inputpdfpath, inputpdfpasswd);
/* 処理結果PDF出力先パスを設定 */
service.setOutputPdf(outpdfpath1);
/* タイムスタンプトークン取得用のハッシュアルゴリズムを設定 */
service.setHashAlgorithm(alg);
/* タイムスタンプトークン取得用のポリシーを設定 */
service.setPolicy(policy);
/* タイムスタンプ局の接続先のURLを設定 */
service.setTsaUrl(tsaurl);
/* タイムスタンプ局接続時の接続ID、パスワードを設定 */
service.setTsaUser(tsauser, tsapasswd);
/* 出力PDFのセキュリティ設定(40/128のどちらかを指定) */
/*
service.setSecurity40(openpasswd, secpasswd,
security40_print, security40_edit,
security40_copy, security40_addnote);
*/
service.setSecurity128(openpasswd, secpasswd,
security128_print, security128_access,
security128_copy, security128_change);
/*****************************************
* 実行
*****************************************/
/* PDFに対し文書タイムスタンプを付与 */
service.generate();
resultBuffer.append("addTimestamp : SUCCESS<br>");
/*****************************************
* 実行
*****************************************/
/* PDFおよびタイムスタンプ情報の取得 */
docinfo = service.getPdfDocument();
/*****************************************
* 取得情報出力:PDFドキュメント情報
*****************************************/
/* ファイルサイズの取得 */
long fileSize = docinfo.getContentSize();
resultBuffer.append("File Size: " + fileSize + " Bytes<br>");
/* ページ数の取得 */
int pageNum = docinfo.getNumberOfPages();
resultBuffer.append("Page Num: " + pageNum + " Pages<br>");
/* ページサイズ(幅)の取得 */
double paperWidth = docinfo.getPaperWidth();
resultBuffer.append("Page Width: " + paperWidth + " pts<br>");
/* ページサイズ(高さ)の取得 */
double paperHeight = docinfo.getPaperHeight();
resultBuffer.append("Page Height: " + paperHeight + " pts<br>");
/* 解像度取得 */
int resolution = docinfo.getResolution();
resultBuffer.append("Resolution: " + resolution + " dpi<br>");
/* 解像度取得 */
int gradation = docinfo.getGradation();
resultBuffer.append("Gradation: " + gradation + "<br>");
/* 最新のタイムスタンプ情報の取得 */
// PdfTimeStamp timeStamp = docinfo.getLatestTimeStamp();
/* タイムスタンプリストの取得 */
PdfTimeStamp[] timeStampList = docinfo.getTimeStamps();
resultBuffer.append("TimeStamp Length: " + timeStampList.length + "<br>");
/* VRI付きタイムスタンプリストの取得 */
PdfTimeStamp[] vriTimeStampList = docinfo.getTimeStampsWithVRI();
if (vriTimeStampList != null) {
resultBuffer.append("VRI TimeStamp Length: " + vriTimeStampList.length + "<br>");
}
/* VRI付きでないタイムスタンプリストの取得 */
PdfTimeStamp[] notVriTimeStampList = docinfo.getTimeStampsWithNotVRI();
if (notVriTimeStampList != null) {
resultBuffer.append("NotVRI TimeStamp Length: " + notVriTimeStampList.length + "<br>");
}
/*****************************************
* 取得情報出力:タイムスタンプ情報
*****************************************/
for (int i = 0; i < timeStampList.length; i++) {
resultBuffer.append("TimeStamp[" + i + "]<br>");
/* ハッシュアルゴリズムの取得 */
HASH_ALGORITHM hashAlgorithm = timeStampList[i]
.getHashAlgorithm();
resultBuffer.append("HashAlgorithm: " + hashAlgorithm + "<br>");
/* 有効期限の取得 */
Date expirationDate = timeStampList[i]
.getTimeStampExpirationDate();
resultBuffer.append("ExpirationDate: " + expirationDate + "<br>");
/* タイムスタンプ生成日時の取得 */
Date createDate = timeStampList[i].getCreationDate();
resultBuffer.append("CreateDate: " + createDate + "<br>");
/* 検証結果の取得 */
int validateResult = timeStampList[i].getValidateResult();
resultBuffer.append("validateResult: " + validateResult + "<br>");
/* 署名Vriが付加されているかの取得 */
boolean vriFlg = timeStampList[i].getVriFlg();
resultBuffer.append("vriFlg: " + vriFlg + "<br>");
/* タイムスタンプ情報の取得 */
PdfTimeStampToken token = timeStampList[i].getTimeStampToken();
/*****************************************
* 取得情報出力:タイムスタンプトークン
*****************************************/
/* タイムスタンプデータ値の取得 */
byte[] tokenData = token.getData();
resultBuffer.append("Token Data: " + tokenData + "<br>");
/* 登録時のタイムスタンプハッシュ値の取得 */
byte[] registerDigest = token.getRegisterDigest();
resultBuffer.append("Token RegisterDigest: " + registerDigest + "<br>");
/* 検証時のタイムスタンプハッシュ値の取得 */
byte[] digest = token.getDigest();
resultBuffer.append("Token Digest: " + digest + "<br>");
}
} catch (PdfTimeStampException e) {
resultBuffer.append("addTimestamp : ERROR <br>");
resultBuffer.append("status : " + e.getCode() + ", message : "+ e.getMessage() + "<br>");
}
finally {
}
return resultBuffer.toString();
}
/**
* 延長タイムスタンプの付与
*/
String extendTimestamp() {
StringBuffer resultBuffer = new StringBuffer(200);
/* PDF情報 */
PdfDocument docinfo;
try {
/*****************************************
* 実行準備
*****************************************/
/* 延長タイムスタンプを付与するPDFファイルのパス、及び権限パスワードを設定 */
service.setInputPdf(outpdfpath1, inputpdfpasswd);
/* 処理結果PDF出力先パスを設定 */
service.setOutputPdf(outpdfpath2);
/* タイムスタンプトークン取得用のハッシュアルゴリズムを設定 */
service.setHashAlgorithm(alg);
/* タイムスタンプトークン取得用のポリシーを設定 */
service.setPolicy(policy);
/* タイムスタンプ局の接続先のURLを設定 */
service.setTsaUrl(tsaurl);
/* タイムスタンプ局接続時の接続ID、パスワードを設定 */
service.setTsaUser(tsauser, tsapasswd);
/*****************************************
* 実行
*****************************************/
/* PDFに対し文書タイムスタンプを付与 */
service.generateLtv();
/*****************************************
* 実行結果出力
*****************************************/
resultBuffer.append("extendTimestamp : SUCCESS<br>");
/*****************************************
* 実行
*****************************************/
/* PDFおよびタイムスタンプ情報の取得 */
docinfo = service.getPdfDocument();
/*****************************************
* 取得情報出力:PDFドキュメント情報
*****************************************/
/* ファイルサイズの取得 */
long fileSize = docinfo.getContentSize();
resultBuffer.append("File Size: " + fileSize + " Bytes<br>");
/* ページ数の取得 */
int pageNum = docinfo.getNumberOfPages();
resultBuffer.append("Page Num: " + pageNum + " Pages<br>");
/* ページサイズ(幅)の取得 */
double paperWidth = docinfo.getPaperWidth();
resultBuffer.append("Page Width: " + paperWidth + " pts<br>");
/* ページサイズ(高さ)の取得 */
double paperHeight = docinfo.getPaperHeight();
resultBuffer.append("Page Height: " + paperHeight + " pts<br>");
/* 解像度取得 */
int resolution = docinfo.getResolution();
resultBuffer.append("Resolution: " + resolution + " dpi<br>");
/* 解像度取得 */
int gradation = docinfo.getGradation();
resultBuffer.append("Gradation: " + gradation + "<br>");
/* 最新のタイムスタンプ情報の取得 */
// PdfTimeStamp timeStamp = docinfo.getLatestTimeStamp();
/* タイムスタンプリストの取得 */
PdfTimeStamp[] timeStampList = docinfo.getTimeStamps();
resultBuffer.append("TimeStamp Length: " + timeStampList.length + "<br>");
/* VRI付きタイムスタンプリストの取得 */
PdfTimeStamp[] vriTimeStampList = docinfo.getTimeStampsWithVRI();
if (vriTimeStampList != null) {
resultBuffer.append("VRI TimeStamp Length: " + vriTimeStampList.length + "<br>");
}
/* VRI付きでないタイムスタンプリストの取得 */
PdfTimeStamp[] notVriTimeStampList = docinfo.getTimeStampsWithNotVRI();
if (notVriTimeStampList != null) {
resultBuffer.append("NotVRI TimeStamp Length: " + notVriTimeStampList.length + "<br>");
}
/*****************************************
* 取得情報出力:タイムスタンプ情報
*****************************************/
for (int i = 0; i < timeStampList.length; i++) {
resultBuffer.append("TimeStamp[" + i + "]<br>");
/* ハッシュアルゴリズムの取得 */
HASH_ALGORITHM hashAlgorithm = timeStampList[i]
.getHashAlgorithm();
resultBuffer.append("HashAlgorithm: " + hashAlgorithm + "<br>");
/* 有効期限の取得 */
Date expirationDate = timeStampList[i]
.getTimeStampExpirationDate();
resultBuffer.append("ExpirationDate: " + expirationDate + "<br>");
/* タイムスタンプ生成日時の取得 */
Date createDate = timeStampList[i].getCreationDate();
resultBuffer.append("CreateDate: " + createDate + "<br>");
/* 検証結果の取得 */
int validateResult = timeStampList[i].getValidateResult();
resultBuffer.append("validateResult: " + validateResult + "<br>");
/* 署名Vriが付加されているかの取得 */
boolean vriFlg = timeStampList[i].getVriFlg();
resultBuffer.append("vriFlg: " + vriFlg + "<br>");
/* タイムスタンプ情報の取得 */
PdfTimeStampToken token = timeStampList[i].getTimeStampToken();
/*****************************************
* 取得情報出力:タイムスタンプトークン
*****************************************/
/* タイムスタンプデータ値の取得 */
byte[] tokenData = token.getData();
resultBuffer.append("Token Data: " + tokenData + "<br>");
/* 登録時のタイムスタンプハッシュ値の取得 */
byte[] registerDigest = token.getRegisterDigest();
resultBuffer.append("Token RegisterDigest: " + registerDigest + "<br>");
/* 検証時のタイムスタンプハッシュ値の取得 */
byte[] digest = token.getDigest();
resultBuffer.append("Token Digest: " + digest + "<br>");
}
} catch (PdfTimeStampException e) {
resultBuffer.append("extendTimestamp : ERROR<br>");
resultBuffer.append("status : " + e.getCode() + ", message : " + e.getMessage() + "<br>");
}
finally{
}
return resultBuffer.toString();
}
/**
* タイムスタンプの検証
*/
String validateTimestamp() {
StringBuffer resultBuffer = new StringBuffer(200);
/* 検証結果 */
int res;
try {
/*****************************************
* 実行準備
*****************************************/
/* タイムスタンプを検証するPDFファイルのパス、及び権限パスワードを設定 */
service.setInputPdf(outpdfpath2, inputpdfpasswd);
/*****************************************
* 実行
*****************************************/
/* PDFのタイムスタンプを検証 */
res = service.validate();
/*****************************************
* 実行結果出力
*****************************************/
resultBuffer.append("validateTimestamp : SUCCESS : [" + res + "]<br>");
} catch (PdfTimeStampException e) {
resultBuffer.append("validateTimestamp : ERROR<br>");
resultBuffer.append("status : " + e.getCode() + ", message : " + e.getMessage() + "<br>");
}
finally{
}
return resultBuffer.toString();
}
String validateTsTimestamp() {
StringBuffer resultBuffer = new StringBuffer(200);
/* 検証結果 */
PdfTimeStamp[] timeStampList;
try {
/*****************************************
* 実行準備
*****************************************/
/* タイムスタンプを検証するPDFファイルのパス、及び権限パスワードを設定 */
service.setInputPdf(outpdfpath2, inputpdfpasswd);
/*****************************************
* 実行
*****************************************/
/* PDFのタイムスタンプを検証 */
timeStampList = service.validateTs();
/*****************************************
* 取得情報出力:タイムスタンプ情報
*****************************************/
for (int i = 0; i < timeStampList.length; i++) {
resultBuffer.append("TimeStamp[" + i + "]<br>");
/* ハッシュアルゴリズムの取得 */
HASH_ALGORITHM hashAlgorithm = timeStampList[i]
.getHashAlgorithm();
resultBuffer.append("HashAlgorithm: " + hashAlgorithm + "<br>");
/* 有効期限の取得 */
Date expirationDate = timeStampList[i]
.getTimeStampExpirationDate();
resultBuffer.append("ExpirationDate: " + expirationDate + "<br>");
/* タイムスタンプ生成日時の取得 */
Date createDate = timeStampList[i].getCreationDate();
resultBuffer.append("CreateDate: " + createDate + "<br>");
/* 検証結果の取得 */
int validateResult = timeStampList[i].getValidateResult();
resultBuffer.append("validateResult: " + validateResult + "<br>");
/* 署名Vriが付加されているかの取得 */
boolean vriFlg = timeStampList[i].getVriFlg();
resultBuffer.append("vriFlg: " + vriFlg + "<br>");
/* タイムスタンプ情報の取得 */
PdfTimeStampToken token = timeStampList[i].getTimeStampToken();
/*****************************************
* 取得情報出力:タイムスタンプトークン
*****************************************/
/* タイムスタンプデータ値の取得 */
byte[] tokenData = token.getData();
resultBuffer.append("Token Data: " + tokenData + "<br>");
/* 登録時のタイムスタンプハッシュ値の取得 */
byte[] registerDigest = token.getRegisterDigest();
resultBuffer.append("Token RegisterDigest: " + registerDigest + "<br>");
/* 検証時のタイムスタンプハッシュ値の取得 */
byte[] digest = token.getDigest();
resultBuffer.append("Token Digest: " + digest + "<br>");
}
} catch (PdfTimeStampException e) {
resultBuffer.append("validateTsTimestamp : ERROR<br>");
resultBuffer.append("status : " + e.getCode() + ", message : " + e.getMessage() + "<br>");
}
finally{
}
return resultBuffer.toString();
}
/**
* PDFドキュメント、及びタイムスタンプ情報の取得
*/
String getInfo() {
StringBuffer resultBuffer = new StringBuffer(200);
/* PDF情報 */
PdfDocument docinfo;
try {
/*****************************************
* 実行準備
*****************************************/
/* 情報を取得するPDFファイルのパス、及び権限パスワードを設定 */
service.setInputPdf(outpdfpath2, inputpdfpasswd);
/*****************************************
* 実行
*****************************************/
/* PDFおよびタイムスタンプ情報の取得 */
docinfo = service.getPdfDocument();
/*****************************************
* 取得情報出力:PDFドキュメント情報
*****************************************/
/* ファイルサイズの取得 */
long fileSize = docinfo.getContentSize();
resultBuffer.append("File Size: " + fileSize + " Bytes<br>");
/* ページ数の取得 */
int pageNum = docinfo.getNumberOfPages();
resultBuffer.append("Page Num: " + pageNum + " Pages<br>");
/* ページサイズ(幅)の取得 */
double paperWidth = docinfo.getPaperWidth();
resultBuffer.append("Page Width: " + paperWidth + " pts<br>");
/* ページサイズ(高さ)の取得 */
double paperHeight = docinfo.getPaperHeight();
resultBuffer.append("Page Height: " + paperHeight + " pts<br>");
/* 解像度取得 */
int resolution = docinfo.getResolution();
resultBuffer.append("Resolution: " + resolution + " dpi<br>");
/* 解像度取得 */
int gradation = docinfo.getGradation();
resultBuffer.append("Gradation: " + gradation + "<br>");
/* 最新のタイムスタンプ情報の取得 */
//PdfTimeStamp timeStamp = docinfo.getLatestTimeStamp();
/* タイムスタンプリストの取得 */
PdfTimeStamp[] timeStampList = docinfo.getTimeStamps();
/* タイムスタンプが付与されていない場合は処理終了 */
if (timeStampList == null) {
resultBuffer.append("タイムスタンプが付与されていません。<br>");
resultBuffer.append("getInfo : SUCCESS<br>");
return resultBuffer.toString();
}
/* 付与されているタイムスタンプを出力 */
resultBuffer.append("TimeStamp Length: " + timeStampList.length + "<br>");
/* VRI付きタイムスタンプリストの取得 */
PdfTimeStamp[] vriTimeStampList = docinfo.getTimeStampsWithVRI();
if (vriTimeStampList != null) {
resultBuffer.append("VRI TimeStamp Length: " + vriTimeStampList.length + "<br>");
}
/* VRI付きでないタイムスタンプリストの取得 */
PdfTimeStamp[] notVriTimeStampList = docinfo.getTimeStampsWithNotVRI();
if (notVriTimeStampList != null) {
resultBuffer.append("NotVRI TimeStamp Length: " + notVriTimeStampList.length + "<br>");
}
/*****************************************
* 取得情報出力:タイムスタンプ情報
*****************************************/
for (int i = 0; i < timeStampList.length; i++) {
resultBuffer.append("TimeStamp[" + i + "]<br>");
/* ハッシュアルゴリズムの取得 */
HASH_ALGORITHM hashAlgorithm = timeStampList[i]
.getHashAlgorithm();
resultBuffer.append("HashAlgorithm: " + hashAlgorithm + "<br>");
/* 有効期限の取得 */
Date expirationDate = timeStampList[i]
.getTimeStampExpirationDate();
resultBuffer.append("ExpirationDate: " + expirationDate + "<br>");
/* タイムスタンプ生成日時の取得 */
Date createDate = timeStampList[i].getCreationDate();
resultBuffer.append("CreateDate: " + createDate + "<br>");
/* 検証結果の取得 */
int validateResult = timeStampList[i].getValidateResult();
resultBuffer.append("validateResult: " + validateResult + "<br>");
/* 署名Vriが付加されているかの取得 */
boolean vriFlg = timeStampList[i].getVriFlg();
resultBuffer.append("vriFlg: " + vriFlg + "<br>");
/* タイムスタンプ情報の取得 */
PdfTimeStampToken token = timeStampList[i].getTimeStampToken();
/*****************************************
* 取得情報出力:タイムスタンプトークン
*****************************************/
/* タイムスタンプデータ値の取得 */
byte[] tokenData = token.getData();
resultBuffer.append("Token Data: " + tokenData + "<br>");
/* 登録時のタイムスタンプハッシュ値の取得 */
byte[] registerDigest = token.getRegisterDigest();
resultBuffer.append("Token RegisterDigest: " + registerDigest + "<br>");
/* 検証時のタイムスタンプハッシュ値の取得 */
byte[] digest = token.getDigest();
resultBuffer.append("Token Digest: " + digest + "<br>");
}
/*****************************************
* 実行結果出力
*****************************************/
resultBuffer.append("getInfo : SUCCESS<br>");
} catch (PdfTimeStampException e) {
resultBuffer.append("getInfo : ERROR<br>");
resultBuffer.append("status : " + e.getCode() + ", message : " + e.getMessage() + "<br>");
}
finally{
}
return resultBuffer.toString();
}
%>
</body>
</html>
コラム
タイムスタンプ局のユーザID、パスワード情報は環境に合わせてご指定ください。
プログラム実行¶
プログラム実行¶
メニューで『PdfTimeStampSample』を選択してください。作成したJSPファイルが実行されます。JSP の実行エラー(コンパイルエラー)になってしまった場合には、エラーメッセージの内容に従いJSP プログラムを修正してください。JSP プログラムが正しく動作しているにも関わらず実行時エラーになってしまう場合は、エラーの内容にしたがって環境を正しく溝築してください(環境を変更した場合は、サーバの再起動が必要になる場合があります)。