RSS Feed

実験的に開発した小さなプログラムやWebサービスを公開。また、気になった最新IT技術情報をブログ形式でメモ。

PDF生成

Zend Frameworkに付属するデモ:
PDFを生成するサンプル PDFをサポートするクラス ”Zend/Pdf.php” を利用してPDFファイルを生成するサンプルです。

動作サンプル : なし (サンプルで生成されたPDFファイルはこちら

ソース: /demos/Zend/Pdf/demo.php

  1. < ?php
  2. /**
  3. * @package Zend_Pdf
  4. * @subpackage demo
  5. */
  6.  
  7. // set include_path to library/ directory only -- see ticket #11
  8. set_include_path( dirname(dirname(dirname(dirname(__FILE__))))
  9.                   . DIRECTORY_SEPARATOR . 'library' );
  10.  
  11. /** Zend_Pdf */
  12. require_once 'Zend/Pdf.php';
  13.  
  14. if (!isset($argv[1])) {
  15.     echo "USAGE: php demo.php <pdf_file> [<output_pdf_file>]
  16. ";
  17.     exit;
  18. }
  19.  
  20. try {
  21.     $pdf = Zend_Pdf::load($argv[1]);
  22. } catch (Zend_Pdf_Exception $e) {
  23.     if ($e->getMessage() == "Can not open '" . $argv[1] . "' file for reading." {
  24.         // Create new PDF if file doesn't exist
  25.         $pdf = new Zend_Pdf();
  26.  
  27.         if (!isset($argv[2])) {
  28.             // force complete file rewriting (instead of updating)
  29.             $argv[2] = $argv[1];
  30.         }
  31.     } else {
  32.         // Throw an exception if it's not the "Can't open file" exception
  33.         throw $e;
  34.     }
  35. }
  36.  
  37. //------------------------------------------------------------------------------------
  38. // Reverse page order
  39. $pdf->pages = array_reverse($pdf->pages);
  40.  
  41. // Create new Style
  42. $style = new Zend_Pdf_Style();
  43. $style->setFillColor(new Zend_Pdf_Color_Rgb(0, 0, 0.9));
  44. $style->setLineColor(new Zend_Pdf_Color_GrayScale(0.2));
  45. $style->setLineWidth(3);
  46. $style->setLineDashingPattern(array(3, 2, 3, 4), 1.6);
  47. $style->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD), 32);
  48.  
  49. // Create new image object
  50. $stampImage = Zend_Pdf_Image::imageWithPath(dirname(__FILE__) . '/stamp.jpg');
  51.  
  52. // Mark page as modified
  53. foreach ($pdf->pages as $page){
  54.     $page->saveGS();
  55.     $page->setStyle($style);
  56.     $page->rotate(0, 0, M_PI_2/3);
  57.  
  58.     $page->saveGS();
  59.     $page->clipCircle(550, -10, 50);
  60.     $page->drawImage($stampImage, 500, -60, 600, 40);
  61.     $page->restoreGS();
  62.  
  63.     $page->drawText('Modified by Zend Framework!', 150, 0);
  64.     $page->restoreGS();
  65. }
  66.  
  67. // Add new page generated by Zend_Pdf object (page is attached to the specified the document)
  68. $pdf->pages[] = ($page1 = $pdf->newPage('A4'));
  69.  
  70. // Add new page generated by Zend_Pdf_Page object (page is not attached to the document)
  71. $pdf->pages[] = ($page2 = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE));
  72.  
  73. // Create new font
  74. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  75.  
  76. // Apply font and draw text
  77. $page1->setFont($font, 36);
  78. $page1->setFillColor(Zend_Pdf_Color_Html::color('#9999cc'));
  79. $page1->drawText('Helvetica 36 text string', 60, 500);
  80.  
  81. // Use font object for another page
  82. $page2->setFont($font, 24);
  83. $page2->drawText('Helvetica 24 text string', 60, 500);
  84.  
  85. // Use another font
  86. $page2->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES), 32);
  87. $page2->drawText('Times-Roman 32 text string', 60, 450);
  88.  
  89. // Draw rectangle
  90. $page2->setFillColor(new Zend_Pdf_Color_GrayScale(0.8));
  91. $page2->setLineColor(new Zend_Pdf_Color_GrayScale(0.2));
  92. $page2->setLineDashingPattern(array(3, 2, 3, 4), 1.6);
  93. $page2->drawRectangle(60, 400, 400, 350);
  94.  
  95. // Draw circle
  96. $page2->setLineDashingPattern(Zend_Pdf_Page::LINE_DASHING_SOLID);
  97. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0));
  98. $page2->drawCircle(85, 375, 25);
  99.  
  100. // Draw sectors
  101. $page2->drawCircle(200, 375, 25, 2*M_PI/3, -M_PI/6);
  102. $page2->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0));
  103. $page2->drawCircle(200, 375, 25, M_PI/6, 2*M_PI/3);
  104. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0));
  105. $page2->drawCircle(200, 375, 25, -M_PI/6, M_PI/6);
  106.  
  107. // Draw ellipse
  108. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 0));
  109. $page2->drawEllipse(250, 400, 400, 350);
  110. $page2->setFillColor(new Zend_Pdf_Color_Cmyk(1, 0, 0, 0));
  111. $page2->drawEllipse(250, 400, 400, 350, M_PI/6, 2*M_PI/3);
  112. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 1, 0));
  113. $page2->drawEllipse(250, 400, 400, 350, -M_PI/6, M_PI/6);
  114.  
  115. // Draw and fill polygon
  116. $page2->setFillColor(new Zend_Pdf_Color_Rgb(1, 0, 1));
  117. $x = array();
  118. $y = array();
  119. for ($count = 0; $count < 8; $count++) {
  120.     $x[] = 140 + 25*cos(3*M_PI_4*$count);
  121.     $y[] = 375 + 25*sin(3*M_PI_4*$count);
  122. }
  123. $page2->drawPolygon($x, $y,
  124.                     Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  125.                     Zend_Pdf_Page::FILL_METHOD_EVEN_ODD);
  126.  
  127. // Draw line
  128. $page2->setLineWidth(0.5);
  129. $page2->drawLine(60, 375, 400, 375);
  130. //------------------------------------------------------------------------------------
  131.  
  132. if (isset($argv[2])) {
  133.     $pdf->save($argv[2]);
  134. } else {
  135.     $pdf->save($argv[1], true /* update */);
  136. }
  137.  
  138. </output_pdf_file>
  139. ?>
関連記事