Главная / Zend Manual Core
Document Info and Metadata

Пример использования модуля Zend_Pdf

Этот раздел дает пример использования модуля.

Этот пример может быть найден в файле demos/Zend/Pdf/demo.php.

Там же есть файл test.pdf, который может использоваться с этим примером для тестирования.

Example #1 Демонстрация использования модуля Zend_Pdf

  1. <?php
  2. /**
  3. * @package Zend_Pdf
  4. * @subpackage demo
  5. */
  6.  
  7. /** Zend_Pdf */
  8. require_once 'Zend/Pdf.php';
  9.  
  10. if (!isset($argv[1])) {
  11.     echo "USAGE: php demo.php <pdf_file> [<output_pdf_file>]\n";
  12.     exit;
  13. }
  14.  
  15. try {
  16.     $pdf = Zend_Pdf::load($argv[1]);
  17. } catch (Zend_Pdf_Exception $e) {
  18.     if ($e->getMessage() == 'Can not open \'' . $argv[1] . '\' file for reading.') {
  19.         // Создается новый PDF, если файл не существует
  20.         $pdf = new Zend_Pdf();
  21.  
  22.         if (!isset($argv[2])) {
  23.             // Полная перезапись файла вместо обновления
  24.             $argv[2] = $argv[1];
  25.         }
  26.     } else {
  27.         // Бросок исключения, если это не исключение "Can't open file"
  28.         throw $e;
  29.     }
  30. }
  31.  
  32. //------------------------------------------------------------------------------------
  33. // Изменить порядок страниц на обратный
  34. $pdf->pages = array_reverse($pdf->pages);
  35.  
  36. // Создание нового стиля
  37. $style = new Zend_Pdf_Style();
  38. $style->setFillColor(new Zend_Pdf_Color_RGB(0, 0, 0.9));
  39. $style->setLineColor(new Zend_Pdf_Color_GrayScale(0.2));
  40. $style->setLineWidth(3);
  41. $style->setLineDashingPattern(array(3, 2, 3, 4), 1.6);
  42. $style->setFont(new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA_BOLD), 32);
  43.  
  44. // Создание нового объекта изображения
  45. $stampImage = Zend_Pdf_ImageFactory::factory(dirname(__FILE__) . '/stamp.jpg');
  46.  
  47. // Обозначение страницы как измененной
  48. foreach ($pdf->pages as $page){
  49.     $page->saveGS();
  50.     $page->setStyle($style);
  51.     $page->rotate(0, 0, M_PI_2/3);
  52.  
  53.     $page->saveGS();
  54.     $page->clipCircle(550, -10, 50);
  55.     $page->drawImage($stampImage, 500, -60, 600, 40);
  56.     $page->restoreGS();
  57.  
  58.     $page->drawText('Modified by Zend Framework!', 150, 0);
  59.     $page->restoreGS();
  60. }
  61.  
  62. // Добавление новой страницы, сгенерированной объектом Zend_Pdf
  63. // (страница прикреплена к определенному документу)
  64. $pdf->pages[] = ($page1 = $pdf->newPage('A4'));
  65.  
  66. // Добавление новой страницы, сгенерированной объектом Zend_Pdf_Page
  67. // (страница не прикреплена к документу)
  68. $pdf->pages[] = ($page2 = new Zend_Pdf_Page(Zend_Pdf_Const::PAGESIZE_LETTER_LANDSCAPE));
  69.  
  70. // Создание нового шрифта
  71. $font = new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA);
  72.  
  73. // Применение шрифта и написание текста
  74. $page1->setFont($font, 36);
  75. $page1->drawText('Helvetica 36 text string', 60, 500);
  76.  
  77. // Использование объекта шрифта для других страниц
  78. $page2->setFont($font, 24);
  79. $page2->drawText('Helvetica 24 text string', 60, 500);
  80.  
  81. // Использование другого шрифта
  82. $page2->setFont(new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_TIMES_ROMAN), 32);
  83. $page2->drawText('Times-Roman 32 text string', 60, 450);
  84.  
  85. // Рисование прямоугольника
  86. $page2->setFillColor(new Zend_Pdf_Color_GrayScale(0.8));
  87. $page2->setLineColor(new Zend_Pdf_Color_GrayScale(0.2));
  88. $page2->setLineDashingPattern(array(3, 2, 3, 4), 1.6);
  89. $page2->drawRectangle(60, 400, 400, 350);
  90.  
  91. // Рисование круга
  92. $page2->setLineDashingPattern(Zend_Pdf_Const::LINEDASHING_SOLID);
  93. $page2->setFillColor(new Zend_Pdf_Color_RGB(1, 0, 0));
  94. $page2->drawCircle(85, 375, 25);
  95.  
  96. // Рисование секторов
  97. $page2->drawCircle(200, 375, 25, 2*M_PI/3, -M_PI/6);
  98. $page2->setFillColor(new Zend_Pdf_Color_CMYK(1, 0, 0, 0));
  99. $page2->drawCircle(200, 375, 25, M_PI/6, 2*M_PI/3);
  100. $page2->setFillColor(new Zend_Pdf_Color_RGB(1, 1, 0));
  101. $page2->drawCircle(200, 375, 25, -M_PI/6, M_PI/6);
  102.  
  103. // Рисование элипса
  104. $page2->setFillColor(new Zend_Pdf_Color_RGB(1, 0, 0));
  105. $page2->drawEllipse(250, 400, 400, 350);
  106. $page2->setFillColor(new Zend_Pdf_Color_CMYK(1, 0, 0, 0));
  107. $page2->drawEllipse(250, 400, 400, 350, M_PI/6, 2*M_PI/3);
  108. $page2->setFillColor(new Zend_Pdf_Color_RGB(1, 1, 0));
  109. $page2->drawEllipse(250, 400, 400, 350, -M_PI/6, M_PI/6);
  110.  
  111. // Рисование и заполнение многоугольника
  112. $page2->setFillColor(new Zend_Pdf_Color_RGB(1, 0, 1));
  113. $x = array();
  114. $y = array();
  115. for ($count = 0; $count < 8; $count++) {
  116.     $x[] = 140 + 25*cos(3*M_PI_4*$count);
  117.     $y[] = 375 + 25*sin(3*M_PI_4*$count);
  118. }
  119. $page2->drawPolygon($x, $y,
  120.                     Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE,
  121.                     Zend_Pdf_Const::FILLMETHOD_EVENODD);
  122.  
  123. // Рисование линии
  124. $page2->setLineWidth(0.5);
  125. $page2->drawLine(60, 375, 400, 375);
  126. //------------------------------------------------------------------------------------
  127.  
  128. if (isset($argv[2])) {
  129.     $pdf->save($argv[2]);
  130. } else {
  131.     $pdf->save($argv[1], true /* update */);
  132. }

Document Info and Metadata