ページ順の編集
では,
リスト7 テストを最初に書く
class pdfpages {
function pdfpages(&$pdf) {
}
function makebooklet() {
}
}
class pdfpages_test {
function test1() {
$pdf =& new dummy_pdf("a b c d");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("d a b c", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b @ @ c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b @ f c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f g");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b g f c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f g h");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("h a b g f c d e", $pdf->pagelist());
}
}
注意点ですが,
ちなみにPHP5以降では,
実行すると,
$ php run.php ........ Expected: "dabc" Fonud: "abcd" ---- test failed. $
では,
リスト8 makebookletを書く
class pdfpages {
var $pdf = null;
function pdfpages(&$pdf) {
$this->pdf =& $pdf;
}
function &newblankpage() {
$page =& $this->pdf->newPage();
return $page;
}
function makebooklet() {
while ((count($this->pdf->pages) % 4))
$this->pdf->pages[] =& $this->newblankpage();
$newpages = array();
$left = count($this->pdf->pages) - 1;
$right = 0;
while ($right < $left) {
$newpages[] =& $this->pdf->pages[$left--];
$newpages[] =& $this->pdf->pages[$right++];
$newpages[] =& $this->pdf->pages[$right++];
$newpages[] =& $this->pdf->pages[$left--];
}
$this->pdf->pages = $newpages;
}
}
実行すると,
$ php run.php ............. test successed. $
あとは,
- Zend Framework
- URL:http://
framework. zend. com/
run.
リスト9 pdf処理を含んだコード
<?php
class dummy_pdfpage {
var $name = "";
function dummy_pdfpage($name = "none") {
$this->name = $name;
}
function getWidth() {
return 1;
}
function getHeight() {
return 1;
}
function drawLine() {
}
}
class dummy_pdf {
var $pages;
function dummy_pdf($s = "") {
$this->pages = array();
if ($s != "")
foreach (explode(" ", $s) as $name)
$this->pages[] =& new dummy_pdfpage($name);
}
function &newPage() {
$page =& new dummy_pdfpage("@");
return $page;
}
function pagelist() {
$array = array();
foreach ($this->pages as $key => $dummy)
$array[] = $this->pages[$key]->name;
return implode(" ", $array);
}
function test1() {
$pdf =& new dummy_pdf();
asserteq("", $pdf->pagelist());
$pdf->pages[] =& new dummy_pdfpage("a");
asserteq("a", $pdf->pagelist());
$pdf->pages[] =& new dummy_pdfpage("b");
asserteq("a b", $pdf->pagelist());
$pdf->pages[] =& $pdf->newPage();
asserteq("a b @", $pdf->pagelist());
$pdf->pages[] =& $pdf->newPage();
asserteq("a b @ @", $pdf->pagelist());
}
function test2() {
$pdf =& new dummy_pdf("a b c");
asserteq("a b c", $pdf->pagelist());
$pdf->pages[] =& new dummy_pdfpage("d");
asserteq("a b c d", $pdf->pagelist());
$pdf->pages[] =& $pdf->newPage();
asserteq("a b c d @", $pdf->pagelist());
}
}
class pdfpages {
var $pdf = null;
function pdfpages(&$pdf) {
$this->pdf =& $pdf;
}
function &newblankpage() {
if (count($this->pdf->pages) <= 0)
die("no page.\n");
$p =& $this->pdf->pages[0];
$page =& $this->pdf->newPage($p->getWidth().":".$p->getHeight());
$page->drawLine(0, 0, 0, 0); # avoid PDF error.
return $page;
}
function makebooklet() {
while ((count($this->pdf->pages) % 4))
$this->pdf->pages[] =& $this->newblankpage();
$newpages = array();
$left = count($this->pdf->pages) - 1;
$right = 0;
while ($right < $left) {
$newpages[] =& $this->pdf->pages[$left--];
$newpages[] =& $this->pdf->pages[$right++];
$newpages[] =& $this->pdf->pages[$right++];
$newpages[] =& $this->pdf->pages[$left--];
}
$this->pdf->pages = $newpages;
}
}
class pdfpages_test {
function test1() {
$pdf =& new dummy_pdf("a b c d");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("d a b c", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b @ @ c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b @ f c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f g");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("@ a b g f c d e", $pdf->pagelist());
$pdf =& new dummy_pdf("a b c d e f g h");
$p =& new pdfpages($pdf);
$p->makebooklet();
asserteq("h a b g f c d e", $pdf->pagelist());
}
}
if (!function_exists("asserteq")) {
set_include_path(get_include_path().PATH_SEPARATOR."/download/ZendFramework-1.11.6/library/");
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance();
ini_set("max_execution_time", "300");
ini_set("memory_limit", "1024M");
$pdf =& Zend_Pdf::load("input.pdf");
$p =& new pdfpages($pdf);
$p->makebooklet();
$pdf->save("output.pdf");
}
?>
また,
今回はユーザインターフェースについては相当手を抜いたので,
エピローグ
いかがでしたでしょうか。実は,