ドキュメントの情報およびメタデータ

Zend_Pdf モジュールの使用例

この節では、モジュールの使用例を示します。

この例は、demos/Zend/Pdf/demo.php にあります。

また test.pdf というファイルも含まれており、 このデモのテスト用に使用します。

Example #1 Zend_Pdf モジュールの使用例

  1. /**
  2. * @package Zend_Pdf
  3. * @subpackage demo
  4. */
  5.  
  6. if (!isset($argv[1])) {
  7.     echo "USAGE: php demo.php <pdf_file> [<output_pdf_file>]\n";
  8.     exit;
  9. }
  10.  
  11. try {
  12.     $pdf = Zend_Pdf::load($argv[1]);
  13. } catch (Zend_Pdf_Exception $e) {
  14.     if ($e->getMessage() == 'Can not open \'' . $argv[1] .
  15.                             '\' file for reading.') {
  16.         // ファイルが存在しない場合は新しい PDF を作成します
  17.         $pdf = new Zend_Pdf();
  18.  
  19.         if (!isset($argv[2])) {
  20.             // ファイルを完全新規に作成しなおします (更新ではありません)
  21.             $argv[2] = $argv[1];
  22.         }
  23.     } else {
  24.         // "Can't open file" 以外の例外の場合はそのままスローします
  25.         throw $e;
  26.     }
  27. }
  28.  
  29. //------------------------------------------------------------------------
  30. // ページの並び順を反転します
  31. $pdf->pages = array_reverse($pdf->pages);
  32.  
  33. // 新しいスタイルを作成します
  34. $style = new Zend_Pdf_Style();
  35. $style->setFillColor(new Zend_Pdf_Color_Rgb(0, 0, 0.9));
  36. $style->setLineColor(new Zend_Pdf_Color_GrayScale(0.2));
  37. $style->setLineWidth(3);
  38. $style->setLineDashingPattern(array(3, 2, 3, 4), 1.6);
  39. $fontH = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
  40. $style->setFont($fontH, 32);
  41.  
  42. try {
  43.     // 新しい画像オブジェクトを作成します。
  44.     $imageFile = dirname(__FILE__) . '/stamp.jpg';
  45.     $stampImage = Zend_Pdf_Image::imageWithPath($imageFile);
  46. } catch (Zend_Pdf_Exception $e) {
  47.     // 画像読み込み時の例外処理の例
  48.     if ($e->getMessage() != 'Image extension is not installed.' &&
  49.         $e->getMessage() != 'JPG support is not configured properly.') {
  50.         throw $e;
  51.     }
  52.     $stampImage = null;
  53. }
  54.  
  55. // ページに修正マークをつけます
  56. foreach ($pdf->pages as $page){
  57.     $page->saveGS()
  58.          ->setAlpha(0.25)
  59.          ->setStyle($style)
  60.          ->rotate(0, 0, M_PI_2/3);
  61.  
  62.     $page->saveGS();
  63.     $page->clipCircle(550, -10, 50);
  64.     if ($stampImage != null) {
  65.         $page->drawImage($stampImage, 500, -60, 600, 40);
  66.     }
  67.     $page->restoreGS();
  68.  
  69.     $page->drawText('Modified by Zend Framework!', 150, 0)
  70.          ->restoreGS();
  71. }
  72.  
  73. // Zend_Pdf オブジェクトが作成した新しいページを追加します
  74. // (ページは、指定したドキュメントにアタッチされます)
  75. $pdf->pages[] = ($page1 = $pdf->newPage('A4'));
  76.  
  77. // Zend_Pdf_Page オブジェクトが作成した新しいページを追加します
  78. // (ページは、ドキュメントにアタッチされません)
  79. $page2 = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE);
  80. $pdf->pages[] = $page2;
  81.  
  82. // 新しいフォントを作成します
  83. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  84.  
  85. // フォントを適用してテキストを描画します
  86. $page1->setFont($font, 36)
  87.       ->setFillColor(Zend_Pdf_Color_Html::color('#9999cc'))
  88.       ->drawText('Helvetica 36 text string', 60, 500);
  89.  
  90. // 別のページでフォントオブジェクトを使用します
  91. $page2->setFont($font, 24)
  92.       ->drawText('Helvetica 24 text string', 60, 500);
  93.  
  94. // 別のフォントを使用します
  95. $fontT = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES);
  96. $page2->setFont($fontT, 32)
  97.       ->drawText('Times-Roman 32 text string', 60, 450);
  98.  
  99. // 矩形を描画します
  100. $page2->setFillColor(new Zend_Pdf_Color_GrayScale(0.8))
  101.       ->setLineColor(new Zend_Pdf_Color_GrayScale(0.2))
  102.       ->setLineDashingPattern(array(3, 2, 3, 4), 1.6)
  103.       ->drawRectangle(60, 400, 400, 350);
  104.  
  105. // 円を描画します
  106. $page2->setLineDashingPattern(Zend_Pdf_Page::LINE_DASHING_SOLID)
  107.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  108.       ->drawCircle(85, 375, 25);
  109.  
  110. // 扇形を描画します
  111. $page2->drawCircle(200, 375, 25, 2*M_PI/3, -M_PI/6)
  112.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  113.       ->drawCircle(200, 375, 25, M_PI/6, 2*M_PI/3)
  114.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  115.       ->drawCircle(200, 375, 25, -M_PI/6, M_PI/6);
  116.  
  117. // 楕円を描画します
  118. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  119.       ->drawEllipse(250, 400, 400, 350)
  120.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  121.       ->drawEllipse(250, 400, 400, 350, M_PI/6, 2*M_PI/3)
  122.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  123.       ->drawEllipse(250, 400, 400, 350, -M_PI/6, M_PI/6);
  124.  
  125. // 多角形を描画して塗りつぶします
  126. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 1));
  127. $x = array();
  128. $y = array();
  129. for ($count = 0; $count < 8; $count++) {
  130.     $x[] = 140 + 25*cos(3*M_PI_4*$count);
  131.     $y[] = 375 + 25*sin(3*M_PI_4*$count);
  132. }
  133. $page2->drawPolygon($x, $y,
  134.                     Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  135.                     Zend_Pdf_Page::FILL_METHOD_EVEN_ODD);
  136.  
  137. // ----------- 座標系を変更して図形を描画します --------------
  138.  
  139. // 座標系を移動します
  140. $page2->saveGS();
  141. $page2->translate(60, 250); // 座標系の移動
  142.  
  143. // 矩形を描画します
  144. $page2->setFillColor(new Zend_Pdf_Color_GrayScale(0.8))
  145.       ->setLineColor(new Zend_Pdf_Color_GrayScale(0.2))
  146.       ->setLineDashingPattern(array(3, 2, 3, 4), 1.6)
  147.       ->drawRectangle(0, 50, 340, 0);
  148.  
  149. // 円を描画します
  150. $page2->setLineDashingPattern(Zend_Pdf_Page::LINE_DASHING_SOLID)
  151.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  152.       ->drawCircle(25, 25, 25);
  153.  
  154. // 扇形を描画します
  155. $page2->drawCircle(140, 25, 25, 2*M_PI/3, -M_PI/6)
  156.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  157.       ->drawCircle(140, 25, 25, M_PI/6, 2*M_PI/3)
  158.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  159.       ->drawCircle(140, 25, 25, -M_PI/6, M_PI/6);
  160.  
  161. // 楕円を描画します
  162. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  163.       ->drawEllipse(190, 50, 340, 0)
  164.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  165.       ->drawEllipse(190, 50, 340, 0, M_PI/6, 2*M_PI/3)
  166.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  167.       ->drawEllipse(190, 50, 340, 0, -M_PI/6, M_PI/6);
  168.  
  169. // 多角形を描画して塗りつぶします
  170. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 1));
  171. $x = array();
  172. $y = array();
  173. for ($count = 0; $count < 8; $count++) {
  174.     $x[] = 80 + 25*cos(3*M_PI_4*$count);
  175.     $y[] = 25 + 25*sin(3*M_PI_4*$count);
  176. }
  177. $page2->drawPolygon($x, $y,
  178.                     Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  179.                     Zend_Pdf_Page::FILL_METHOD_EVEN_ODD);
  180.  
  181. // 直線を描画します
  182. $page2->setLineWidth(0.5)
  183.       ->drawLine(0, 25, 340, 25);
  184.  
  185. $page2->restoreGS();
  186.  
  187. // 座標系を移動し、傾け、倍率を変えます
  188. $page2->saveGS();
  189. $page2->translate(60, 150)     // 座標系を移動します
  190.       ->skew(0, 0, 0, -M_PI/9) // 座標系を傾けます
  191.       ->scale(0.9, 0.9);       // 座標系の倍率を変えます
  192.  
  193. // 矩形を描画します
  194. $page2->setFillColor(new Zend_Pdf_Color_GrayScale(0.8))
  195.       ->setLineColor(new Zend_Pdf_Color_GrayScale(0.2))
  196.       ->setLineDashingPattern(array(3, 2, 3, 4), 1.6)
  197.       ->drawRectangle(0, 50, 340, 0);
  198.  
  199. // 円を描画します
  200. $page2->setLineDashingPattern(Zend_Pdf_Page::LINE_DASHING_SOLID)
  201.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  202.       ->drawCircle(25, 25, 25);
  203.  
  204. // 扇形を描画します
  205. $page2->drawCircle(140, 25, 25, 2*M_PI/3, -M_PI/6)
  206.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  207.       ->drawCircle(140, 25, 25, M_PI/6, 2*M_PI/3)
  208.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  209.       ->drawCircle(140, 25, 25, -M_PI/6, M_PI/6);
  210.  
  211. // 楕円を描画します
  212. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0))
  213.       ->drawEllipse(190, 50, 340, 0)
  214.       ->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0))
  215.       ->drawEllipse(190, 50, 340, 0, M_PI/6, 2*M_PI/3)
  216.       ->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0))
  217.       ->drawEllipse(190, 50, 340, 0, -M_PI/6, M_PI/6);
  218.  
  219. // 多角形を描画して塗りつぶします
  220. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 1));
  221. $x = array();
  222. $y = array();
  223. for ($count = 0; $count < 8; $count++) {
  224.     $x[] = 80 + 25*cos(3*M_PI_4*$count);
  225.     $y[] = 25 + 25*sin(3*M_PI_4*$count);
  226. }
  227. $page2->drawPolygon($x, $y,
  228.                     Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  229.                     Zend_Pdf_Page::FILL_METHOD_EVEN_ODD);
  230.  
  231. // 直線を描画します
  232. $page2->setLineWidth(0.5)
  233.       ->drawLine(0, 25, 340, 25);
  234.  
  235. $page2->restoreGS();
  236.  
  237. //------------------------------------------------------------------------
  238.  
  239. if (isset($argv[2])) {
  240.     $pdf->save($argv[2]);
  241. } else {
  242.     $pdf->save($argv[1], true /* 更新 */);
  243. }

ドキュメントの情報およびメタデータ