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) | サンプルプログラム | このブログの読者になる | 更新情報をチェックする

PDFファイルに注釈(アノテーション)を追加する(Classic ASP版)

前回は、PDFファイルに注釈(アノテーション)を追加するPHPサンプルプログラムをご紹介しましたが、今回は、Classic ASP版をご紹介します。Server.CreateObjectすれば良いのですが、今回のサンプルを準備させていただくにあたり、一つはまったことがあります。テストはWindows 7 Ultimate + IIS 7.5で行ったのですが、数年前に試した時には、Classic ASP版でもうまくいっていたはずなのに、なぜかうまくいきません。Googleで調べまくっては、試行錯誤して、やっとたどりついたのが、64bit環境なのに、32bitのdllを呼び出しているということが理由だと分かりました。私のWindows 7は64bitでした。今までPHPなどでは意識してこなかったけど、たまたまということかもしれません。

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

<%

	On Error Resume Next

	'当方の環境は、Windows 7 64bit版でテストをしていますので、64bit版dllを使用します。
	Set PDFLibrary = Server.CreateObject("DebenuPDFLibrary64AX0912.PDFLibrary")

	If Err <>0 Then
		Response.Write Err.Description & "
" Response.End End If If PDFLibrary.UnlockKey("ライセンスキー") = 1 Then Response.Write("License validation successful!") Response.Write("
") Response.Write("Valid license key: ") Response.Write(PDFLibrary.LicenseInfo()) Response.Write("

") Else Response.Write("License validation failed!") Response.Write("

") Response.End End If Dim filename,result,left,top,AnnotType,PopupTop,PopupLeft,PopupWidth,PopupHeight,title,contents,red,green,blue,open,error_code,filename2 filename = "091201_2.pdf" 'Quick PDF Libraryで扱う場合、ファイルのパスはフルパスに filename = Server.MapPath(filename) result = PDFLibrary.LoadFromFile(filename,"") If result = 0 Then Response.Write("load error
" & filename & "
") Response.End End If 'Quick PDF Libraryでは、座標系はデフォルトで0,0がPDFファイル 'の左下になりますので注意してください。 '普通?の感覚どおりPDFファイルの左上を0,0にしたい場合は、 'SetOriginメソッド(引数1)を使ってください。 ' http://www.quickpdflibrary.com/help/quickpdf/SetOrigin.php PDFLibrary.SetOrigin(1) '注釈の位置を示すアイコンが表示される座標 left=130 top=70 '注釈のタイプ。AnnotType=0ならNote AnnotType=0 '注釈の位置を示すアイコンをクリックした際に表示される 'ポップアップの表示の表示される座標 PopupTop=120 PopupLeft=10 'ポップアップのサイズ PopupWidth=300 PopupHeight=70 '注釈のタイトル title="修正の際に気をつけるべきところ" '改行もOKです。 contents ="12月1日に最終の原稿が入るので、それ以降に修正すること。" & vbLF & "新規事業計画の問題点に関する考察はもっと具体的に" '色の指定は赤緑黄色の割合を0から1の範囲で指定します。 red=0.8 green=0.5 blue=0.2 'PDF文章が開いたときに最初から注釈が表示されているよう 'にしたい場合は、open=1 open=0 result = PDFLibrary.SelectPage(1) If result = 0 Then error_code = PDFLibrary.LastErrorCode() Response.Write("can not select page of " & filename & ".
" & error_code) Response.End End If result = PDFLibrary.AddNoteAnnotation(left,top,AnnotType,PopupLeft,PopupTop,PopupWidth,PopupHeight,title,contents,red,green,blue,open) If result = 0 Then error_code = PDFLibrary.LastErrorCode() Response.Write("can not add annotation. " & filename & "
" & error_code) Response.End End If '保存先のパス filename2 = Replace(filename,".pdf","_annotate_asp.pdf") '保存します。 result=PDFLibrary.SaveToFile(filename2) If result = 0 Then error_code = PDFLibrary.LastErrorCode() Response.Write("can not save." & filename & "
" & error_code) Response.End End If Response.Write("success
") %>
なお、注釈に表示される日時を消すことも可能です。詳細は、Quick PDF Libraryの体験版もしくは製品版のマニュアル(PDF)を参照してください。

posted by PDF太郎 at 15:40| Comment(0) | TrackBack(0) | サンプルプログラム | このブログの読者になる | 更新情報をチェックする

PDFファイルに注釈(アノテーション)を追加する(PHP版)

今回は、PDFファイルに注釈(アノテーション)を追加するPHPサンプルプログラムをご紹介します。AddNoteAnnotationメソッドについての詳細は、Quick PDF Libraryの体験版もしくは製品版のマニュアル(PDF)にも記載されていますが、こちらにも記載されています。

下記のPHPプログラムを実行すると、下記のような注釈を追加できます。注釈のタイトル・コメントの内容・アイコンの種類・サイズ・色などさまざまにカスタマイズできます。

annotate.jpg

<?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="091201_2.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; } //Quick PDF Libraryでは、座標系はデフォルトで0,0がPDFファイル //の左下になりますので注意してください。 //普通?の感覚どおりPDFファイルの左上を0,0にしたい場合は、 //SetOriginメソッド(引数1)を使ってください。 //http://www.quickpdflibrary.com/help/quickpdf/SetOrigin.php $PDFLibrary->SetOrigin(1); //注釈の位置を示すアイコンが表示される座標 $left=130; $top=70; //注釈アイコンのタイプ。$AnnotType=0ならNote $AnnotType=0; //注釈の位置を示すアイコンをクリックした際に表示される //ポップアップの表示の表示される座標 $PopupTop=120; $PopupLeft=10; //ポップアップのサイズ $PopupWidth=300; $PopupHeight=70; //注釈のタイトル $title="修正の際に気をつけるべきところ"; //改行もOKです。 $contents ="12月1日に最終の原稿が入るので、それ以降に修正すること。\n新規事業計画の問題点に関する考察はもっと具体的に"; //色の指定は赤緑黄色の割合を0から1の範囲で指定します。 $red=0.6; $green=0.5; $blue=0.9; //PDF文章が開いたときに最初から注釈が表示されているよう //にしたい場合は、$open=1 $open=0; $result = $PDFLibrary->SelectPage(1); if(!$result){ echo "can not select page of $filename.
"; exit; } $result = $PDFLibrary->AddNoteAnnotation($left,$top,$AnnotType,$PopupLeft,$PopupTop,$PopupWidth,$PopupHeight,$title,$contents,$red,$green,$blue,$open); //Quick PDF Libraryでは常にフルパスに変換して処理 $filename2 = str_replace(".pdf","_annotate.pdf",$filename); //保存します。 $result=$PDFLibrary->SaveToFile($filename2); if(!$result){ echo "can not save.$filename2
"; exit; } $PDFLibrary = null; $filename3=basename($filename2); echo "success
"; echo "$filename3"; ?>
なお、注釈に表示される日時を消すことも可能です。詳細は、Quick PDF Libraryの体験版もしくは製品版のマニュアル(PDF)を参照してください。

posted by PDF太郎 at 14:35| Comment(0) | TrackBack(0) | サンプルプログラム | このブログの読者になる | 更新情報をチェックする
×

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