この記事は5年以上前の情報で、内容が古くなっている可能性があります。

FPDFでPDFにセキュリティ(文書の制限)を付ける

FPDFでPDFにセキュリティを付ける方法のメモです。
FPDF本家サイトのScriptにProtectionというスクリプトがあるので、それをダウンロード。

MBFPDFと併用する場合の、mbfpdf.phpの書き換え方法

MBPDFと併用して使う場合、MBPDFを、FPDF_Protectionの派生クラスとなるように、変更する必要があります。

fpdf_protectionのファイルをインクルード(14行目あたりに追加)

require('fpdf_protection.php');

クラスを定義してある部分の基底クラスを FPDF から FPDF_Protection に変更(42行目あたりを変更)

class MBFPDF extends FPDF
下のように書き換え
class MBFPDF extends FPDF_Protection

_putType0($font)関数(554行目あたり)の以下の一行(596行目あたり)を修正

$this->_out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('.$font['registry']['ordering'].’) /Supplement ‘.$font['registry']['supplement'].’>>’);
下のように書き換え
$this->_out('/CIDSystemInfo <</Registry '.$this->_textstring('Adobe').' /Ordering '.$this->_textstring($font['registry']['ordering']).’ /Supplement ‘.$font['registry']['supplement'].’>>’);

基本的な使い方

//MBFPDFクラスは、FPDF_Protectionの派生クラスにしておく
require('lib/mbfpdf.php');

$pdf=new MBFPDF();

//セキュリティを付ける(許可する動作, 開くときのパスワード, 編集するときのパスワード)
/*
許可する動作で、指定できる値(配列で指定)
  copy: テキストと画像をクリップボードにコピーする
  print: 印刷
  modify: 編集
  annot-forms: 注釈とフォーム
開くときのパスワードは、空の場合はパスワード無し。デフォルトは空
編集するときのパスワードは、指定しないとランダムになる
*/

//印刷のみ許可、開くときのパスワード=userpass、編集するときのパスワード=ownerpass
$pdf->SetProtection(array('print'), 'userpass', 'ownerpass');

$pdf->AddMBFont(KOZMIN, 'EUC-JP');

$pdf->Open();
$pdf->AddPage();

$pdf->SetFont(KOZMIN, '', 14);
$pdf->Write(16,"セキュリティ付のPDFです。");

$pdf->Output('protect_output.pdf', 'D');