2012年12月03日

PDFファイルのページサイズ(WidthやHeight)を取得する(PHP編その1)

今回は、PDFファイルの各ページの用紙サイズ(WidthやHeight)を取得する方法のご紹介です。今回のサンプル(PHP)の中心は、PageWithメソッド及びPageHeightメソッドになりますが、同メソッドについての詳細は、Quick PDF Libraryの体験版もしくは製品版のマニュアル(PDF)にも記載されていますが、こちらにも記載されています。

<?php

	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

	//このPHPプログラムの文字コードはShift_JISで作成しています。

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

	if($PDFLibrary->UnlockKey("ライセンスキー") == 1){
		header("Content-type: text/html; charset=Shift_JIS");
		echo "License validation successful!";
		echo "
"; echo "Valid license key: "; echo $PDFLibrary->LicenseInfo; echo "

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

"; exit; } $filename ="manual.pdf"; //Quick PDF LibraryでPDFファイルを取り扱うときは常にフルパスに $filename = realpath($filename); try{$result = $PDFLibrary->LoadFromFile($filename,"");}catch(Exception $error){ echo "can not load " . $filename . "
"; echo $error . "
"; $error_code=$PDFLibrary->LastErrorCode(); echo $error_code . "
"; exit; } if(!$result){ $error_code=$PDFLibrary->LastErrorCode(); echo "load error
". $error_code; exit; } //ミリメートルで表示したい場合などは、SetMeasurementUnitsメソッドを利用して //ください。デフォルトの単位は、ポイントにになっています。 //http://www.quickpdflibrary.com/help/quickpdf/SetMeasurementUnits.php //$PDFLibrary->SetMeasurementUnits(1); $pages = $PDFLibrary->PageCount(); for($i=1;$i<=$pages;$i++){ $PDFLibrary->SelectPage($i); $pdf_width = $PDFLibrary->PageWidth(); $pdf_height = $PDFLibrary->PageHeight(); //PDFファイルの場合、いろんな用紙サイズが混在できるのも大きな特長 //の一つですから、必ずしも全頁同じサイズとは限りません。 echo $i . "ページ目:" . $pdf_width."*". $pdf_height."
\n"; } $PDFLibrary = null; echo "finish"; ?>

ただし、上記の標準のメソッドでは正しく用紙サイズを取得できないPDFファイルがあります。そのための回避策をサポートに教えてもらったことがありますが、その方法についてはこちらを参照してください。

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

2012年12月02日

PHPにて、PDFファイルにしおり(ブックマーク)を追加する方法

今回は、PDFファイルのしおり機能(Bookmark機能。ブックマーク機能)について取り上げます。もちろん、Acrobat®でもしおりの追加機能はありますが、Quick PDF Libraryを使うと次のような場合に非常に便利です。

MS WORDなどからPDFファイルを作成後、しおりを手動で追加する作業はAcrobat®ではなくても、いろいろなPDF作成ソフトで比較的容易に可能です。しかしながら、元のMS WORDファイルを変更した場合、再び、しおりを手動で追加していく作業を最初からやり直さなければならないことがあります。これは、文字通り大変な作業です。数文字の修正であれば、Acrobat®のタイプライターツールなどで可能な場合がありますが、そうできない場合もあります。

しかし、Quick PDF LibraryなどのPDFライブラリーを使うと、そのしおりを追加するプログラムを残しておいて次回も使いまわしできるため、大元のPDFファイルが修正されても、プログラム内のパラメータの微調整で済むことになり、大変便利です。毎回、何というタイトルを付けようかと考える必要がなくなりますし、入力ミスをなくすために毎回入力チェック・校正作業をする必要がなくなります。

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

下記のプログラムには日本語が含まれ、Shift_JISで作成されています。Shift_JISで扱えない文字を表示させたい場合の方法は思いつきません。無理やりUTF-8の文字列を渡しても、

Warning: Unknown: Could not convert string to unicode: `Unicode 文字のマッピングがターゲットのマルチバイト コード ページにありません。 ' in E:\(中略)bookmark_utf8.php on line 65

のようなエラーが発生します。

下記のプログラムを実行すると、
outline.jpg
のように表示されますから、確かにしおりが追加されていることが分かります。

<?php

	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

	//このPHPプログラムの文字コードはShift_JISで作成しています。

	$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 ="hogehoge.pdf"; //Quick PDF LibraryでPDFファイルを取り扱うときは常にフルパスに $filename = realpath($filename); try{$result = $PDFLibrary->LoadFromFile($filename,"");}catch(Exception $error){ echo "can not load " . $filename . "
"; echo $error . "
"; $error_code=$PDFLibrary->LastErrorCode(); echo $error_code . "
"; exit; } if(!$result){ $error_code=$PDFLibrary->LastErrorCode(); echo "load error
". $error_code; exit; } //普通?の感覚どおりPDFファイルの左上を0,0にしたい場合は、 //SetOriginメソッド(引数1)を使ってください。 // http://www.quickpdflibrary.com/help/quickpdf/SetOrigin.php $PDFLibrary->SetOrigin(1); //しおりをデフォルトで表示する //Quick PDF Libraryのマニュアルの中ではbookmarkではなく、outlineという英語になっています。 //http://www.quickpdflibrary.com/help/quickpdf/SetPageMode.php $PDFLibrary->SetPageMode(1); //http://www.quickpdflibrary.com/help/quickpdf/NewOutline.php $bookmark_id =$PDFLibrary->NewOutline(0,"各教科の勉強方法",9,570); //しおりに階層を持たせることも可能。第一引数に親のしおりIDを与えます。 $bookmark_id2 = $PDFLibrary->NewOutline($bookmark_id,"国語の勉強方法",9,610); $bookmark_id3 = $PDFLibrary->NewOutline($bookmark_id,"算数の勉強方法",10,550); $bookmark_id4 = $PDFLibrary->NewOutline($bookmark_id,"理科の勉強方法",12,220); $bookmark_id5 = $PDFLibrary->NewOutline(0,"学習効率を高めるノートの作り方",19,0); $bookmark_id6 = $PDFLibrary->NewOutline(0,"まとめ",22,0); $new_file = str_replace(".pdf","2.pdf",$filename); $PDFLibrary->SaveToFile($new_file); $new_file2=basename($new_file); echo "$new_file2

"; $PDFLibrary = null; echo "success"; ?>


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

2012年12月01日

PDFファイルを画像ファイル化する(PHPサンプル)

今回は、Quick PDF Libraryを使って、PDFファイルを画像化(JPEGなど)することをやってみたいと思います。実際には、JPEGだけでなく、PNGやTIFFでの出力も可能です。例えば、PDFファイルへのリンクの際に、1ページ目のサムネイルを表示させるというシチュエーションでも使えそうです。

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

ただし、バージョン9.12では、日本語のPDFファイルについて、正しく出力できないケースが稀にあるようです。(10のうち1つぐらいですが、作り方によっては100%という場合もあるかもしれません。今、サポートに問い合わせ中です。)日本語のテキストの部分だけ抜け落ちます。英語のテキストは正しく表示されています。また、日本語でも元々画像内に表示されていたものであれば、画像化してもやはり表示されています。

<?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="hogehoge.pdf"; if(!file_exists($filename)){ print $filename . " does not exist."; exit; } $jpeg_name_basic = basename($filename,".pdf") . ".jpg"; //Quick PDF Libraryで扱う場合、ファイルのパスはフルパスに $filename = realpath($filename); $result = $PDFLibrary->LoadFromFile($filename,""); if(!$result){ echo "load error $filename"; exit; } //ページ数を取得 $pages = $PDFLibrary->PageCount(); //echo $pages . "
"; //DPIを上げると画像は綺麗になりますが、ファイルサイズは増大します。 $dpi = 96; //JPEGの質を1から100までで指定します。何も指定しなければ75になっている //ようですが、75だと特に明朝系の文字で汚く仕上がる傾向があるようです。 $quality=80; $result=$PDFLibrary->SetJPEGQuality($quality); if(!$result){ echo "can not set jpeg quality of $filename.
"; exit; } //1 = JPEG output。PNGやTIFFでの出力も可能です。 // パラメータの詳細は、http://www.quickpdflibrary.com/help/quickpdf/RenderPageToFile.php $options = 1; for($i=1;$i<=$pages;$i++){ $result = $PDFLibrary->SelectPage($i); if(!$result){ echo "can not select page $i of $filename.
"; exit; } //保存用PDFファイルのパス。Quick PDF Libraryでは常にフルパスに変換して処理 $jpeg_name = str_replace(".jpg","_page${i}_dpi${dpi}_q${quality}.jpg",$jpeg_name_basic); $jpeg_name = realpath("./") ."/jpeg/". $jpeg_name; //echo $jpeg_name . "
"; $result2 = $PDFLibrary->RenderPageToFile($dpi,$i,$options,$jpeg_name); if(!$result2){ echo "can not output jepg of page $i. $filename.
"; exit; } } echo "success
"; ?>


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

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