2012年11月26日

ライブラリーを使って、PHPでPDFファイルを印刷禁止にする方法

今回は、特に需要の多いPDFファイルに印刷禁止などのセキュリティを追加する方法です。Quick PDF Libraryでは、まず、印刷禁止やテキストのコピー禁止などのセキュリティ設定をEncodePermissionsメソッドで、まず行ってから、その値を使って、Encryptメソッドで実際に暗号化の設定を行うという二段階になっています。Quick PDF Libraryは256-bitの暗号化にも対応したPDFライブラリーです。

今回のサンプル(PHP)の中心は、EncodePermissionsメソッドになりますが、同メソッドについての詳細は、Quick PDF Libraryの体験版もしくは製品版のマニュアル(PDF)にも記載されていますが、こちらにも記載されています。

<?php
	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

	$PDFLibrary= new COM("DebenuPDFLibraryAX0912.PDFLibrary");
	if(!$PDFLibrary){
		echo "COM error";
		exit;
	}

	if($PDFLibrary->UnlockKey("ライセンスキー") == 1){
		echo "License validation successful!";
		echo "
"; echo "Valid license key: "; echo $PDFLibrary->LicenseInfo; echo "

"; }else{ echo "License validation failed!"; echo "

"; exit; } $filename="test.pdf"; if(!file_exists($filename)){ print $filename . " does not exist."; exit; } //Quick PDF Libraryで扱う場合、ファイルのパスはフルパスに $filename = realpath($filename); $result = $PDFLibrary->LoadFromFile($filename,""); if(!$result){ echo "load error $filename"; exit; } //印刷を許可しない $CanPrint = 0; //テキストや画像のコピーを許可しない $CanCopy = 0; //文書の変更を許可しない $CanChange = 0; //注釈の追加を許可しない $CanAddNotes = 0; //フォームフィールドへの書き込みを許可しない $CanFillFields = 0; //スクリーンリーダーデバイスのテキストアクセスを許可しない $CanCopyAccess = 0; //文書のアセンブリを許可しない $CanAssemble = 0; //印刷を許可する場合、高解像度での印刷を許可するかどうか //低解像度での印刷を許可する場合は、$CanPrint=1;にした上で$CanPrintFullを //0にします。 $CanPrintFull = 0; //パーミッションの設定 $permissions = $PDFLibrary->EncodePermissions($CanPrint, $CanCopy, $CanChange,$CanAddNotes, $CanFillFields,$CanCopyAccess, $CanAssemble,$CanPrintFull); if(!$permissions){ echo "can not set permissions. $filename
"; exit; } //オーナーパスワード $owner_password="ABC123PDF"; //オープンパスワード(ユーザーパスワード) $open_password=""; //暗号化の強度 $strength=3 → 256-bit AES (Acrobat 9 以降で表示可能) $strength = 3; $result = $PDFLibrary->Encrypt($owner_password,$open_password,$strength,$permissions); if(!$result){ echo "can not ecnrypt $filename
"; exit; } //Quick PDF Libraryでは常にフルパスに変換して処理 $filename2 = str_replace(".pdf","_encrypted.pdf",$filename); //保存します。 $result=$PDFLibrary->SaveToFile($filename2); if(!$result){ echo "can not save.$filename2
"; exit; } $PDFLibrary = null; $filename3=basename($filename2); echo "success
"; echo "$filename3"; ?>
なお、需要がどれほどあるかは疑問ですが、日本語のパスワードの設定はできません。これは、Acrobat®でもできませんから、特に問題はないでしょう。

posted by PDF太郎 at 20:25| Comment(0) | TrackBack(0) | サンプルプログラム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/303953765

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。