Zend_Pdf-Drawing.xml 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20854 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.pdf.drawing">
  5. <title>Desenhando</title>
  6. <sect2 id="zend.pdf.drawing.geometry">
  7. <title>Geometria</title>
  8. <para>
  9. O <acronym>PDF</acronym> usa a mesma geometria do PostScript. A geometria começa no
  10. canto inferior esquerdo da página e, por padrão, é medida em pontos (1/72 de polegada).
  11. </para>
  12. <para>
  13. O tamanho da página pode ser recuperado de um objeto página:
  14. </para>
  15. <para>
  16. <programlisting language="php"><![CDATA[
  17. $width = $pdfPage->getWidth();
  18. $height = $pdfPage->getHeight();
  19. ]]></programlisting>
  20. </para>
  21. </sect2>
  22. <sect2 id="zend.pdf.drawing.color">
  23. <title>Cores</title>
  24. <para>
  25. O <acronym>PDF</acronym> possui uma poderosa capacidade para a representação de cores.
  26. O módulo <classname>Zend_Pdf</classname> dá suporte à Escala de Cinza, RGB e CMYK.
  27. Qualquer um deles pode ser usado em qualquer lugar onde um
  28. <classname>Zend_Pdf_Color</classname> for requisitado. As classes
  29. <classname>Zend_Pdf_Color_GrayScale</classname>,
  30. <classname>Zend_Pdf_Color_Rgb</classname> e <classname>Zend_Pdf_Color_Cmyk</classname>
  31. fornecem a seguinte funcionalidade:
  32. </para>
  33. <programlisting language="php"><![CDATA[
  34. // $grayLevel (float number). 0.0 (black) - 1.0 (white)
  35. $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
  36. // $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
  37. $color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
  38. // $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
  39. $color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
  40. ]]></programlisting>
  41. <para>
  42. O estilo de cores do HTML também é fornecido na classe
  43. <classname>Zend_Pdf_Color_Html</classname>:
  44. </para>
  45. <programlisting language="php"><![CDATA[
  46. $color1 = new Zend_Pdf_Color_Html('#3366FF');
  47. $color2 = new Zend_Pdf_Color_Html('silver');
  48. $color3 = new Zend_Pdf_Color_Html('forestgreen');
  49. ]]></programlisting>
  50. </sect2>
  51. <sect2 id="zend.pdf.drawing.shape-drawing">
  52. <title>Desenhando Formas</title>
  53. <para>
  54. Todas as operações de desenho podem ser feitas no contexto de uma página
  55. <acronym>PDF</acronym>.
  56. </para>
  57. <para>
  58. A classe <classname>Zend_Pdf_Page</classname> provê um conjunto de formas básicas para
  59. desenho:
  60. </para>
  61. <programlisting language="php"><![CDATA[
  62. /**
  63. * Desenha uma linha de x1,y1 até x2,y2.
  64. *
  65. * @param float $x1
  66. * @param float $y1
  67. * @param float $x2
  68. * @param float $y2
  69. * @return Zend_Pdf_Page
  70. */
  71. public function drawLine($x1, $y1, $x2, $y2);
  72. ]]></programlisting>
  73. <programlisting language="php"><![CDATA[
  74. /**
  75. * Desenha um retângulo.
  76. *
  77. * Tipos de preenchimento:
  78. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - preenche o retângulo
  79. * e o traço (padrão)
  80. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - traço do retângulo
  81. * Zend_Pdf_Page::SHAPE_DRAW_FILL - preenche o retângulo
  82. *
  83. * @param float $x1
  84. * @param float $y1
  85. * @param float $x2
  86. * @param float $y2
  87. * @param integer $fillType
  88. * @return Zend_Pdf_Page
  89. */
  90. public function drawRectangle($x1, $y1, $x2, $y2,
  91. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  92. ]]></programlisting>
  93. <programlisting language="php"><![CDATA[
  94. /**
  95. * Desenha um retângulo arredondado.
  96. *
  97. * Tipos de preenchimento:
  98. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - preenche o retângulo
  99. * e o traço (padrão)
  100. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - traço do retângulo
  101. * Zend_Pdf_Page::SHAPE_DRAW_FILL - preenche o retângulo
  102. *
  103. * radius é um inteiro que representa o raio dos quatro cantos, ou uma matriz
  104. * de quatro números inteiros que representam o raio a partir do superior
  105. * esquerdo, indo no sentido horário
  106. *
  107. * @param float $x1
  108. * @param float $y1
  109. * @param float $x2
  110. * @param float $y2
  111. * @param integer|array $radius
  112. * @param integer $fillType
  113. * @return Zend_Pdf_Page
  114. */
  115. public function drawRoundedRectangle($x1, $y1, $x2, $y2, $radius,
  116. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  117. ]]></programlisting>
  118. <programlisting language="php"><![CDATA[
  119. /**
  120. * Desenha um polígono.
  121. *
  122. * If $fillType is Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE or
  123. * Zend_Pdf_Page::SHAPE_DRAW_FILL, then polygon is automatically closed.
  124. * See detailed description of these methods in a PDF documentation
  125. * (section 4.4.2 Path painting Operators, Filling)
  126. *
  127. * @param array $x - array of float (the X co-ordinates of the vertices)
  128. * @param array $y - array of float (the Y co-ordinates of the vertices)
  129. * @param integer $fillType
  130. * @param integer $fillMethod
  131. * @return Zend_Pdf_Page
  132. */
  133. public function drawPolygon($x, $y,
  134. $fillType =
  135. Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  136. $fillMethod =
  137. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  138. ]]></programlisting>
  139. <programlisting language="php"><![CDATA[
  140. /**
  141. * Draw a circle centered on x, y with a radius of radius.
  142. *
  143. * Angles are specified in radians
  144. *
  145. * Method signatures:
  146. * drawCircle($x, $y, $radius);
  147. * drawCircle($x, $y, $radius, $fillType);
  148. * drawCircle($x, $y, $radius, $startAngle, $endAngle);
  149. * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
  150. *
  151. *
  152. * It's not a really circle, because PDF supports only cubic Bezier
  153. * curves. But very good approximation.
  154. * It differs from a real circle on a maximum 0.00026 radiuses (at PI/8,
  155. * 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 and 15*PI/8 angles).
  156. * At 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 and 7*PI/4 it's exactly
  157. * a tangent to a circle.
  158. *
  159. * @param float $x
  160. * @param float $y
  161. * @param float $radius
  162. * @param mixed $param4
  163. * @param mixed $param5
  164. * @param mixed $param6
  165. * @return Zend_Pdf_Page
  166. */
  167. public function drawCircle($x,
  168. $y,
  169. $radius,
  170. $param4 = null,
  171. $param5 = null,
  172. $param6 = null);
  173. ]]></programlisting>
  174. <programlisting language="php"><![CDATA[
  175. /**
  176. * Draw an ellipse inside the specified rectangle.
  177. *
  178. * Method signatures:
  179. * drawEllipse($x1, $y1, $x2, $y2);
  180. * drawEllipse($x1, $y1, $x2, $y2, $fillType);
  181. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  182. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
  183. *
  184. * Angles are specified in radians
  185. *
  186. * @param float $x1
  187. * @param float $y1
  188. * @param float $x2
  189. * @param float $y2
  190. * @param mixed $param5
  191. * @param mixed $param6
  192. * @param mixed $param7
  193. * @return Zend_Pdf_Page
  194. */
  195. public function drawEllipse($x1,
  196. $y1,
  197. $x2,
  198. $y2,
  199. $param5 = null,
  200. $param6 = null,
  201. $param7 = null);
  202. ]]></programlisting>
  203. </sect2>
  204. <sect2 id="zend.pdf.drawing.text-drawing">
  205. <title>Desenhando Texto</title>
  206. <para>
  207. As operações de desenho de texto também existem no contexto de uma página
  208. <acronym>PDF</acronym>. Você pode desenhar uma linha de texto em qualquer posição da
  209. página ao fornecer as coordenadas x e y. A fonte e o tamanho da fonte atuais são usadas
  210. para a operação de desenho (veja a descrição detalhada abaixo).
  211. </para>
  212. <programlisting language="php"><![CDATA[
  213. /**
  214. * Draw a line of text at the specified position.
  215. *
  216. * @param string $text
  217. * @param float $x
  218. * @param float $y
  219. * @param string $charEncoding (optional) Character encoding of source
  220. * text.Defaults to current locale.
  221. * @throws Zend_Pdf_Exception
  222. * @return Zend_Pdf_Page
  223. */
  224. public function drawText($text, $x, $y, $charEncoding = '');
  225. ]]></programlisting>
  226. <example id="zend.pdf.drawing.text-drawing.example-1">
  227. <title>Desenhar uma string na página</title>
  228. <programlisting language="php"><![CDATA[
  229. ...
  230. $pdfPage->drawText('Olá mundo!', 72, 720);
  231. ...
  232. ]]></programlisting>
  233. </example>
  234. <para>
  235. Por padrão, as strings de texto são interpretadas usando o método de decodificação e
  236. caracteres local. Se você tiver uma string que use um método de codificação diferente
  237. (como uma string UTF-8 sendo lida de um arquivo no disco, ou uma string MacRoman obtida
  238. de um bando de dados legado), você pode a codificação na hora de desenhar e a
  239. <classname>Zend_Pdf</classname> irá tratar a comunicação para você. Você pode fornecer
  240. as strings em qualquer método de codificação suportada pela função <code><ulink
  241. url="http://www.php.net/manual/function.iconv.php">iconv()</ulink></code> do
  242. <acronym>PHP</acronym>:
  243. </para>
  244. <example id="zend.pdf.drawing.text-drawing.example-2">
  245. <title>Desenhar uma string codificada em UTF-8 em uma página</title>
  246. <programlisting language="php"><![CDATA[
  247. ...
  248. // Read a UTF-8-encoded string from disk
  249. $unicodeString = fread($fp, 1024);
  250. // Draw the string on the page
  251. $pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');
  252. ...
  253. ]]></programlisting>
  254. </example>
  255. </sect2>
  256. <sect2 id="zend.pdf.drawing.using-fonts">
  257. <title>Usando fontes</title>
  258. <para>
  259. O método <methodname>Zend_Pdf_Page::drawText()</methodname> usa a fonte atual da página,
  260. que é configurada através do método <methodname>Zend_Pdf_Page::setFont()</methodname>:
  261. </para>
  262. <programlisting language="php"><![CDATA[
  263. /**
  264. * Set current font.
  265. *
  266. * @param Zend_Pdf_Resource_Font $font
  267. * @param float $fontSize
  268. * @return Zend_Pdf_Page
  269. */
  270. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  271. ]]></programlisting>
  272. <para>
  273. Documentos <acronym>PDF</acronym> suportam as fontes PostScript Type 1 e TrueType, assim
  274. como dois tipos especiais do <acronym>PDF</acronym>, o Type 3 e as fontes compostas.
  275. Existem também 14 fontes padrão Type 1 inclusas em todos os visualizadores de
  276. <acronym>PDF</acronym>: Courier (4 estilos), Helvetica (4 estilos), Times (4 estilos),
  277. Symbol, e Zapf Dingbats.
  278. </para>
  279. <para>
  280. <classname>Zend_Pdf</classname> atualmente dá suporte às 14 fontes
  281. <acronym>PDF</acronym> padrão, assim como às suas fontes personalizadas TrueType.
  282. Objetos do tipo Font são obtidos via um dos dois métodos fábrica:
  283. <methodname>Zend_Pdf_Font::fontWithName($fontName)</methodname> para as 14 fontes padrão
  284. do <acronym>PDF</acronym> ou
  285. <methodname>Zend_Pdf_Font::fontWithPath($filePath)</methodname> para fontes
  286. personalizadas.
  287. </para>
  288. <example id="zend.pdf.drawing.using-fonts.example-1">
  289. <title>Criar uma fonte padrão</title>
  290. <programlisting language="php"><![CDATA[
  291. ...
  292. // Create new font
  293. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  294. // Apply font
  295. $pdfPage->setFont($font, 36);
  296. ...
  297. ]]></programlisting>
  298. </example>
  299. <para>
  300. As constantes para as 14 fontes <acronym>PDF</acronym> padrão são definidas na classe
  301. <classname>Zend_Pdf_Font</classname>:
  302. <itemizedlist>
  303. <listitem><para>Zend_Pdf_Font::FONT_COURIER</para></listitem>
  304. <listitem><para>Zend_Pdf_Font::FONT_COURIER_BOLD</para></listitem>
  305. <listitem><para>Zend_Pdf_Font::FONT_COURIER_ITALIC</para></listitem>
  306. <listitem><para>Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC</para></listitem>
  307. <listitem><para>Zend_Pdf_Font::FONT_TIMES</para></listitem>
  308. <listitem><para>Zend_Pdf_Font::FONT_TIMES_BOLD</para></listitem>
  309. <listitem><para>Zend_Pdf_Font::FONT_TIMES_ITALIC</para></listitem>
  310. <listitem><para>Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC</para></listitem>
  311. <listitem><para>Zend_Pdf_Font::FONT_HELVETICA</para></listitem>
  312. <listitem><para>Zend_Pdf_Font::FONT_HELVETICA_BOLD</para></listitem>
  313. <listitem><para>Zend_Pdf_Font::FONT_HELVETICA_ITALIC</para></listitem>
  314. <listitem><para>Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC</para></listitem>
  315. <listitem><para>Zend_Pdf_Font::FONT_SYMBOL</para></listitem>
  316. <listitem><para>Zend_Pdf_Font::FONT_ZAPFDINGBATS</para></listitem>
  317. </itemizedlist>
  318. </para>
  319. <para>
  320. Você também pode usar qualquer fonte individual TrueType (que normalmente possui a
  321. extensão '.ttf') ou uma fonte OpenType (de extensão '.otf') se ela contiver o mesmo
  322. contorno das TrueType. Atualmente sem suporte, mas planejadas para um lançamento futuro
  323. são os arquivos .dfont do Mac OS X e os arquivos Microsoft TrueType Collection (extensão
  324. '.ttc').
  325. </para>
  326. <para>
  327. Para usar uma fonte TrueType, você deve fornecer o caminho completo para a fonte. Se a
  328. fonte não puder ser lida por algum motivo, ou se ela não for uma fonte TrueType, o
  329. método fábrica irá lançar uma exceção:
  330. </para>
  331. <example id="zend.pdf.drawing.using-fonts.example-2">
  332. <title>Criar uma fonte TrueType</title>
  333. <programlisting language="php"><![CDATA[
  334. ...
  335. // Create new font
  336. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF');
  337. // Apply font
  338. $pdfPage->setFont($goodDogCoolFont, 36);
  339. ...
  340. ]]></programlisting>
  341. </example>
  342. <para>
  343. Por padrão, fontes personalizadas serão embarcadas no documento <acronym>PDF</acronym>
  344. resultante. Isso permite que as pessoas que receberem o arquivo poderão visualizá-lo
  345. corretamente, mesmo que não possuam as fontes apropriadas instaladas em seus sistemas.
  346. Se você estiver preocupado com o tamanho do arquivo você pode solicitar que a fonte não
  347. seja incluída através de uma opção 'não embarque' do método fábrica:
  348. </para>
  349. <example id="zend.pdf.drawing.using-fonts.example-3">
  350. <title>Criar uma fonte TrueType, mas não embarcá-la no documento PDF</title>
  351. <programlisting language="php"><![CDATA[
  352. ...
  353. // Create new font
  354. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF',
  355. Zend_Pdf_Font::EMBED_DONT_EMBED);
  356. // Apply font
  357. $pdfPage->setFont($goodDogCoolFont, 36);
  358. ...
  359. ]]></programlisting>
  360. </example>
  361. <para>
  362. Se o programa da fonte não for embarcado, mas o recebedor do arquivo
  363. <acronym>PDF</acronym> tiver a fonte instalada em seu sistema ele irá ver o documento
  364. corretamente. Caso ele não possua a fonte correta instalada, o visualizador
  365. <acronym>PDF</acronym> fará o melhor para sintetizar uma substituição.
  366. </para>
  367. <para>
  368. Algumas fontes possuem regras de licença específicas que evitam que elas sejam
  369. embarcadas em documentos <acronym>PDF</acronym>. Então, para que você não seja pego de
  370. surpresa por isso, se você tentar usar uma fonte que não pode ser embarcada, o método
  371. fábrica irá lançar uma exceção.
  372. </para>
  373. <para>
  374. Você ainda pode usar estas fontes, mas deve passar a opção 'não embarque' como foi
  375. descrito acima, ou então você pode simplesmente suprimir a exceção:
  376. </para>
  377. <example id="zend.pdf.drawing.using-fonts.example-4">
  378. <title>Não lançar uma exceção para fontes que não podem ser embarcadas</title>
  379. <programlisting language="php"><![CDATA[
  380. ...
  381. $font = Zend_Pdf_Font::fontWithPath(
  382. '/path/to/unEmbeddableFont.ttf',
  383. Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
  384. );
  385. ...
  386. ]]></programlisting>
  387. </example>
  388. <para>
  389. Esta técnica de supressão é preferível se você permitir que o usuário final escolha sua
  390. própria fonte. Fontes que podem ser embarcadas no documento <acronym>PDF</acronym> vão
  391. ser; aquelas que não puderem, não serão.
  392. </para>
  393. <para>
  394. Programas de fonte podem ser um tanto grandes, alguns alcançam dezenas de megabytes. Por
  395. padrão, todas as fontes embarcadas são comprimidas usando o esquema de compressão Flate,
  396. resultando, em média, em uma economia de espaço de 50%. Se, por alguma razão, você não
  397. quer comprimir o programa da fonte, você pode desabilitar isso através de uma opção:
  398. </para>
  399. <example id="zend.pdf.drawing.using-fonts.example-5">
  400. <title>Não comprimir uma fonte embarcada</title>
  401. <programlisting language="php"><![CDATA[
  402. ...
  403. $font = Zend_Pdf_Font::fontWithPath('/path/to/someReallyBigFont.ttf',
  404. Zend_Pdf_Font::EMBED_DONT_COMPRESS);
  405. ...
  406. ]]></programlisting>
  407. </example>
  408. <para>
  409. Finalmente, quando necessário, você pode combinar as opções de embarque usando o
  410. operador binário OR:
  411. </para>
  412. <example id="zend.pdf.drawing.using-fonts.example-6">
  413. <title>Combinando opções de embarque de fonte</title>
  414. <programlisting language="php"><![CDATA[
  415. ...
  416. $font = Zend_Pdf_Font::fontWithPath(
  417. $someUserSelectedFontPath,
  418. (Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION |
  419. Zend_Pdf_Font::EMBED_DONT_COMPRESS));
  420. ...
  421. ]]></programlisting>
  422. </example>
  423. </sect2>
  424. <sect2 id="zend.pdf.drawing.standard-fonts-limitations">
  425. <title>Standard PDF fonts limitations</title>
  426. <para>
  427. Standard <acronym>PDF</acronym> fonts use several single byte encodings internally
  428. (see <ulink url="http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf">PDF
  429. Reference, Sixth Edition, version 1.7</ulink> Appendix D for details). They are
  430. generally equal to Latin1 character set (except Symbol and ZapfDingbats fonts).
  431. </para>
  432. <para>
  433. <classname>Zend_Pdf</classname> uses CP1252 (WinLatin1) for drawing text with standard
  434. fonts.
  435. </para>
  436. <para>
  437. Text still can be provided in any other encoding, which must be specified if it differs
  438. from a current locale. Only WinLatin1 characters will be actually drawn.
  439. </para>
  440. <example id="zend.pdf.drawing.using-fonts.example-7">
  441. <title>Combining font embedding options</title>
  442. <programlisting language="php"><![CDATA[
  443. ...
  444. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER);
  445. $pdfPage->setFont($font, 36)
  446. ->drawText('Euro sign - €', 72, 720, 'UTF-8')
  447. ->drawText('Text with umlauts - à è ì', 72, 650, 'UTF-8');
  448. ...
  449. ]]></programlisting>
  450. </example>
  451. </sect2>
  452. <sect2 id="zend.pdf.drawing.extracting-fonts">
  453. <title>Extracting fonts</title>
  454. <para>
  455. <classname>Zend_Pdf</classname> module provides a possibility to extract fonts from
  456. loaded documents.
  457. </para>
  458. <para>
  459. It may be useful for incremental document updates. Without this functionality you have
  460. to attach and possibly embed font into a document each time you want to update it.
  461. </para>
  462. <para>
  463. <classname>Zend_Pdf</classname> and <classname>Zend_Pdf_Page</classname> objects provide
  464. special methods to extract all fonts mentioned within a document or a page:
  465. </para>
  466. <example id="zend.pdf.drawing.extracting-fonts.example-1">
  467. <title>Extracting fonts from a loaded document</title>
  468. <programlisting language="php"><![CDATA[
  469. ...
  470. $pdf = Zend_Pdf::load($documentPath);
  471. ...
  472. // Get all document fonts
  473. $fontList = $pdf->extractFonts();
  474. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  475. $yPosition = 700;
  476. foreach ($fontList as $font) {
  477. $page->setFont($font, 15);
  478. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  479. 'en',
  480. 'UTF-8');
  481. $page->drawText($fontName . ': The quick brown fox jumps over the lazy dog',
  482. 100,
  483. $yPosition,
  484. 'UTF-8');
  485. $yPosition -= 30;
  486. }
  487. ...
  488. // Get fonts referenced within the first document page
  489. $firstPage = reset($pdf->pages);
  490. $firstPageFonts = $firstPage->extractFonts();
  491. ...
  492. ]]></programlisting>
  493. </example>
  494. <example id="zend.pdf.drawing.extracting-fonts.example-2">
  495. <title>Extracting font from a loaded document by specifying font name</title>
  496. <programlisting language="php"><![CDATA[
  497. ...
  498. $pdf = new Zend_Pdf();
  499. ...
  500. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  501. $font = Zend_Pdf_Font::fontWithPath($fontPath);
  502. $page->setFont($font, $fontSize);
  503. $page->drawText($text, $x, $y);
  504. ...
  505. // This font name should be stored somewhere...
  506. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  507. 'en',
  508. 'UTF-8');
  509. ...
  510. $pdf->save($docPath);
  511. ...
  512. ]]></programlisting>
  513. <programlisting language="php"><![CDATA[
  514. ...
  515. $pdf = Zend_Pdf::load($docPath);
  516. ...
  517. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  518. /* $srcPage->extractFont($fontName) can also be used here */
  519. $font = $pdf->extractFont($fontName);
  520. $page->setFont($font, $fontSize);
  521. $page->drawText($text, $x, $y);
  522. ...
  523. $pdf->save($docPath, true /* incremental update mode */);
  524. ...
  525. ]]></programlisting>
  526. </example>
  527. <para>
  528. Extracted fonts can be used in the place of any other font with the following
  529. limitations:
  530. <itemizedlist>
  531. <listitem>
  532. <para>
  533. Extracted font can be used only in the context of the document from which it
  534. was extracted.
  535. </para>
  536. </listitem>
  537. <listitem>
  538. <para>
  539. Possibly embedded font program is actually not extracted. So extracted font
  540. can't provide correct font metrics and original font has to be used for text
  541. width calculations:
  542. <programlisting language="php"><![CDATA[
  543. ...
  544. $font = $pdf->extractFont($fontName);
  545. $originalFont = Zend_Pdf_Font::fontWithPath($fontPath);
  546. $page->setFont($font /* use extracted font for drawing */, $fontSize);
  547. $xPosition = $x;
  548. for ($charIndex = 0; $charIndex < strlen($text); $charIndex++) {
  549. $page->drawText($text[$charIndex], xPosition, $y);
  550. // Use original font for text width calculation
  551. $width = $originalFont->widthForGlyph(
  552. $originalFont->glyphNumberForCharacter($text[$charIndex])
  553. );
  554. $xPosition += $width/$originalFont->getUnitsPerEm()*$fontSize;
  555. }
  556. ...
  557. ]]></programlisting>
  558. </para>
  559. </listitem>
  560. </itemizedlist>
  561. </para>
  562. </sect2>
  563. <sect2 id="zend.pdf.drawing.image-drawing">
  564. <title>Desenhando Imagens</title>
  565. <para>
  566. A classe <classname>Zend_Pdf_Page</classname> fornece o método drawImage() para o
  567. desenho de imagens:
  568. </para>
  569. <programlisting language="php"><![CDATA[
  570. /**
  571. * Draw an image at the specified position on the page.
  572. *
  573. * @param Zend_Pdf_Resource_Image $image
  574. * @param float $x1
  575. * @param float $y1
  576. * @param float $x2
  577. * @param float $y2
  578. * @return Zend_Pdf_Page
  579. */
  580. public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);
  581. ]]></programlisting>
  582. <para>
  583. Objetos de imagem devem ser criados com o método
  584. <methodname>Zend_Pdf_Image::imageWithPath($filePath)</methodname> (imagens JPG, PNG e
  585. TIFF são suportadas agora):
  586. </para>
  587. <example id="zend.pdf.drawing.image-drawing.example-1">
  588. <title>Desenhando imagens</title>
  589. <programlisting language="php"><![CDATA[
  590. ...
  591. // load image
  592. $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
  593. $pdfPage->drawImage($image, 100, 100, 400, 300);
  594. ...
  595. ]]></programlisting>
  596. </example>
  597. <para>
  598. <emphasis>Importante! O suporte a JPEG requer que a extensão <acronym>PHP</acronym> GD
  599. esteja configurada.</emphasis> <emphasis>Importante! O suporte a PNG requer que
  600. extensão ZLIB esteja configurada para trabalhar com imagens com canal
  601. Alpha.</emphasis>
  602. </para>
  603. <para>
  604. Consulte a documentação do <acronym>PHP</acronym> para informações detalhadas (<ulink
  605. url="http://www.php.net/manual/en/ref.image.php">http://www.php.net/manual/en/ref.image.php</ulink>).
  606. (<ulink
  607. url="http://www.php.net/manual/en/ref.zlib.php">http://www.php.net/manual/en/ref.zlib.php</ulink>).
  608. </para>
  609. </sect2>
  610. <sect2 id="zend.pdf.drawing.line-drawing-style">
  611. <title>Estilo de desenho de linhas</title>
  612. <para>
  613. O desenho de linhas é definido pela largura, cor e padrão de traços. Todos estes
  614. parâmetros podem ser atribuídos pelos seguintes métodos da classe
  615. <classname>Zend_Pdf_Page</classname>:
  616. </para>
  617. <programlisting language="php"><![CDATA[
  618. /** Set line color. */
  619. public function setLineColor(Zend_Pdf_Color $color);
  620. /** Set line width. */
  621. public function setLineWidth(float $width);
  622. /**
  623. * Set line dashing pattern.
  624. *
  625. * Pattern is an array of floats:
  626. * array(on_length, off_length, on_length, off_length, ...)
  627. * Phase is shift from the beginning of line.
  628. *
  629. * @param array $pattern
  630. * @param array $phase
  631. * @return Zend_Pdf_Page
  632. */
  633. public function setLineDashingPattern($pattern, $phase = 0);
  634. ]]></programlisting>
  635. </sect2>
  636. <sect2 id="zend.pdf.drawing.fill-style">
  637. <title>Estilo de preenchimento</title>
  638. <para>
  639. Os métodos <methodname>Zend_Pdf_Page::drawRectangle()</methodname>,
  640. <methodname>Zend_Pdf_Page::drawPolygon()</methodname>,
  641. <methodname>Zend_Pdf_Page::drawCircle()</methodname> e
  642. <methodname>Zend_Pdf_Page::drawEllipse()</methodname> usam o argumento
  643. <varname>$fillType</varname> como um parâmetro opcional. Ele pode ser:
  644. </para>
  645. <itemizedlist>
  646. <listitem>
  647. <para>Zend_Pdf_Page::SHAPE_DRAW_STROKE - pincelamento</para>
  648. </listitem>
  649. <listitem>
  650. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL - apenas preenchimento</para>
  651. </listitem>
  652. <listitem>
  653. <para>
  654. Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - preenchimento e pincelamento
  655. (comportamento padrão)
  656. </para>
  657. </listitem>
  658. </itemizedlist>
  659. <para>
  660. Os métodos <methodname>Zend_Pdf_Page::drawPolygon()</methodname> também recebem um
  661. parâmetro adicional <varname>$fillMethod</varname>:
  662. </para>
  663. <itemizedlist>
  664. <listitem>
  665. <para>Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING (comportamento padrão)</para>
  666. <para>
  667. A <citetitle>referência do PDF</citetitle> descreve esta regra como:
  668. <blockquote>
  669. <para>
  670. A regra "nonzero winding number" determina se um dado ponto está dentro
  671. de um caminho por conceitualmente desenhar um raio a partir desse ponto
  672. até o infinito em qualquer direção e, em seguida, analisar os lugares
  673. onde um segmento do caminho atravessa o raio. Começando a contagem do 0,
  674. a regra acrescenta 1 cada vez que um segmento cruza o raio da esquerda
  675. para a direita e subtrai 1 cada vez que um segmento cruza da direita
  676. para a esquerda. Após a contagem de todos os cruzamentos, se o resultado
  677. for 0 então o ponto está fora do caminho; de outra forma está dentro.
  678. Nota: O método descrito não especifica o que fazer se um caminho
  679. segmento coincide ou é tangente ao escolhido raio. Uma vez que a
  680. direção do raio é arbitrária, a regra simplesmente escolhe um raio que
  681. não encontra tais problemas de interseção. Para simples caminhos
  682. convexos, a regra "nonzero winding number" define o interior e o
  683. exterior como esperado intuitivamente. Os casos mais interessantes são
  684. os envolvem caminhos complexos ou com auto-intersecção, como os que são
  685. apresentados na Figura 4.10 (na Referência do <acronym>PDF</acronym>).
  686. Para um caminho que consiste em uma estrela de cinco pontas, desenhada
  687. com cinco linhas retas conectadas se inter-seccionando, a regra
  688. considera como sendo o interior toda a área delimitada pela estrela,
  689. incluindo o pentágono no centro. Para um caminho composto de dois
  690. círculos concêntricos, as áreas delimitadas por ambos os círculos são
  691. consideradas como sendo o interior, desde que ambos os círculos sejam
  692. desenhados na mesma direção. Se os círculos forem desenhados em direções
  693. opostas, apenas a forma da "rosquinha" entre eles está no interior, de
  694. acordo com a regra; o "buraco da rosquinha" está no exterior.
  695. </para>
  696. </blockquote>
  697. </para>
  698. </listitem>
  699. <listitem>
  700. <para>Zend_Pdf_Page::FILL_METHOD_EVEN_ODD</para>
  701. <para>
  702. A <citetitle>referência do PDF</citetitle> descreve esta regra como:
  703. <blockquote>
  704. <para>
  705. Uma alternativa à regra "nonzero winding number" é a regra "even-odd".
  706. Esta regra determina a "interiorização" de um ponto através do desenho
  707. de um raio daquele ponto em qualquer direção e simplesmente contando a
  708. quantidade de segmentos de caminhos que cruzam o raio, independentemente
  709. da direção. Se a quantidade for ímpar, o ponto está no interior; se for
  710. par está no exterior. Isto gera os mesmos resultados da regra "nonzero
  711. winding number" para caminhos com formas simples, mas produz resultados
  712. diferentes para os mais de forma mais complexa. A Figura 4.11 (na
  713. Referência do <acronym>PDF</acronym>) mostra os efeitos da aplicação da
  714. regra "even-odd" para caminhos complexos. Para a estrela de cinco
  715. pontas, a regra considera os pontos triangulares como estando no
  716. interior do caminho, mas não o pentágono no centro. Para os dois
  717. círculos concêntricos, apenas a forma da "rosquinha" entre os círculos é
  718. considerada como interior, independentemente das direções em que eles
  719. foram desenhados.
  720. </para>
  721. </blockquote>
  722. </para>
  723. </listitem>
  724. </itemizedlist>
  725. </sect2>
  726. <sect2 id="zend.pdf.drawing.linear-transformations">
  727. <title>Transformações Lineares</title>
  728. <sect3 id="zend.pdf.drawing.linear-transformations.rotations">
  729. <title>Rotações</title>
  730. <para>
  731. A página <acronym>PDF</acronym> pode ser rotacionada antes do uso de qualquer
  732. operação de desenho. Isso pode ser feito pelo método
  733. <methodname>Zend_Pdf_Page::rotate()</methodname>:
  734. </para>
  735. <programlisting language="php"><![CDATA[
  736. /**
  737. * Rotate the page.
  738. *
  739. * @param float $x - the X co-ordinate of rotation point
  740. * @param float $y - the Y co-ordinate of rotation point
  741. * @param float $angle - rotation angle
  742. * @return Zend_Pdf_Page
  743. */
  744. public function rotate($x, $y, $angle);
  745. ]]></programlisting>
  746. </sect3>
  747. <sect3 id="zend.pdf.drawing.linear-transformations.scale">
  748. <title>Starting from ZF 1.8, scaling</title>
  749. <para>
  750. Scaling transformation is provided by
  751. <methodname>Zend_Pdf_Page::scale()</methodname> method:
  752. </para>
  753. <programlisting language="php"><![CDATA[
  754. /**
  755. * Scale coordination system.
  756. *
  757. * @param float $xScale - X dimention scale factor
  758. * @param float $yScale - Y dimention scale factor
  759. * @return Zend_Pdf_Page
  760. */
  761. public function scale($xScale, $yScale);
  762. ]]></programlisting>
  763. </sect3>
  764. <sect3 id="zend.pdf.drawing.linear-transformations.translate">
  765. <title>Starting from ZF 1.8, translating</title>
  766. <para>
  767. Coordinate system shifting is performed by
  768. <methodname>Zend_Pdf_Page::translate()</methodname> method:
  769. </para>
  770. <programlisting language="php"><![CDATA[
  771. /**
  772. * Translate coordination system.
  773. *
  774. * @param float $xShift - X coordinate shift
  775. * @param float $yShift - Y coordinate shift
  776. * @return Zend_Pdf_Page
  777. */
  778. public function translate($xShift, $yShift);
  779. ]]></programlisting>
  780. </sect3>
  781. <sect3 id="zend.pdf.drawing.linear-transformations.skew">
  782. <title>Starting from ZF 1.8, skewing</title>
  783. <para>
  784. Page skewing can be done using <methodname>Zend_Pdf_Page::skew()</methodname>
  785. method:
  786. </para>
  787. <programlisting language="php"><![CDATA[
  788. /**
  789. * Translate coordination system.
  790. *
  791. * @param float $x - the X co-ordinate of axis skew point
  792. * @param float $y - the Y co-ordinate of axis skew point
  793. * @param float $xAngle - X axis skew angle
  794. * @param float $yAngle - Y axis skew angle
  795. * @return Zend_Pdf_Page
  796. */
  797. public function skew($x, $y, $xAngle, $yAngle);
  798. ]]></programlisting>
  799. </sect3>
  800. </sect2>
  801. <sect2 id="zend.pdf.drawing.save-restore">
  802. <title>Salvar/restaurar estados gráficos</title>
  803. <para>
  804. A qualquer hora os estados gráficos de uma página (fonte atual, tamanho da fonte, cor
  805. das linhas, cor de preenchimento, estilo de linha, rotação da página, e área de corte)
  806. podem ser salvos e então restaurados. Operações "Salvar" colocam os dados em uma pilha,
  807. as restaurações recuperam os estados da pilha.
  808. </para>
  809. <para>
  810. Existem dois métodos na classe <classname>Zend_Pdf_Page</classname> para essas
  811. operações:
  812. </para>
  813. <programlisting language="php"><![CDATA[
  814. /**
  815. * Save the graphics state of this page.
  816. * This takes a snapshot of the currently applied style, position,
  817. * clipping area and any rotation/translation/scaling that has been
  818. * applied.
  819. *
  820. * @return Zend_Pdf_Page
  821. */
  822. public function saveGS();
  823. /**
  824. * Restore the graphics state that was saved with the last call to
  825. * saveGS().
  826. *
  827. * @return Zend_Pdf_Page
  828. */
  829. public function restoreGS();
  830. ]]></programlisting>
  831. </sect2>
  832. <sect2 id="zend.pdf.drawing.clipping">
  833. <title>Recorte de área de desenho</title>
  834. <para>
  835. O <acronym>PDF</acronym> e o módulo <classname>Zend_Pdf</classname> dão suporte ao
  836. recorte de áreas de desenho. O recorte da área atual limita as regiões da página que
  837. serão afetadas por operações de pintura. Inicialmente é a página toda.
  838. </para>
  839. <para>
  840. A classe <classname>Zend_Pdf_Page</classname> fornece um conjunto de métodos para
  841. operações de recorte.
  842. </para>
  843. <programlisting language="php"><![CDATA[
  844. /**
  845. * Intersect current clipping area with a rectangle.
  846. *
  847. * @param float $x1
  848. * @param float $y1
  849. * @param float $x2
  850. * @param float $y2
  851. * @return Zend_Pdf_Page
  852. */
  853. public function clipRectangle($x1, $y1, $x2, $y2);
  854. ]]></programlisting>
  855. <programlisting language="php"><![CDATA[
  856. /**
  857. * Intersect current clipping area with a polygon.
  858. *
  859. * @param array $x - array of float (the X co-ordinates of the vertices)
  860. * @param array $y - array of float (the Y co-ordinates of the vertices)
  861. * @param integer $fillMethod
  862. * @return Zend_Pdf_Page
  863. */
  864. public function clipPolygon($x,
  865. $y,
  866. $fillMethod =
  867. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  868. ]]></programlisting>
  869. <programlisting language="php"><![CDATA[
  870. /**
  871. * Intersect current clipping area with a circle.
  872. *
  873. * @param float $x
  874. * @param float $y
  875. * @param float $radius
  876. * @param float $startAngle
  877. * @param float $endAngle
  878. * @return Zend_Pdf_Page
  879. */
  880. public function clipCircle($x,
  881. $y,
  882. $radius,
  883. $startAngle = null,
  884. $endAngle = null);
  885. ]]></programlisting>
  886. <programlisting language="php"><![CDATA[
  887. /**
  888. * Intersect current clipping area with an ellipse.
  889. *
  890. * Method signatures:
  891. * drawEllipse($x1, $y1, $x2, $y2);
  892. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  893. *
  894. * @todo process special cases with $x2-$x1 == 0 or $y2-$y1 == 0
  895. *
  896. * @param float $x1
  897. * @param float $y1
  898. * @param float $x2
  899. * @param float $y2
  900. * @param float $startAngle
  901. * @param float $endAngle
  902. * @return Zend_Pdf_Page
  903. */
  904. public function clipEllipse($x1,
  905. $y1,
  906. $x2,
  907. $y2,
  908. $startAngle = null,
  909. $endAngle = null);
  910. ]]></programlisting>
  911. </sect2>
  912. <sect2 id="zend.pdf.drawing.styles">
  913. <title>Estilos</title>
  914. <para>
  915. A classe <classname>Zend_Pdf_Style</classname> fornece funcionalidades de estilo.
  916. </para>
  917. <para>
  918. Estilos podem ser usados para o armazenamento de um conjunto de parâmetros do estado
  919. gráfico e aplicá-los à uma página <acronym>PDF</acronym> com uma operação:
  920. </para>
  921. <programlisting language="php"><![CDATA[
  922. /**
  923. * Set the style to use for future drawing operations on this page
  924. *
  925. * @param Zend_Pdf_Style $style
  926. * @return Zend_Pdf_Page
  927. */
  928. public function setStyle(Zend_Pdf_Style $style);
  929. /**
  930. * Return the style, applied to the page.
  931. *
  932. * @return Zend_Pdf_Style|null
  933. */
  934. public function getStyle();
  935. ]]></programlisting>
  936. <para>
  937. A classe <classname>Zend_Pdf_Style</classname> fornece um conjunto de métodos para
  938. configurar ou recuperar diferentes parâmetros do estado gráfico:
  939. </para>
  940. <programlisting language="php"><![CDATA[
  941. /**
  942. * Set line color.
  943. *
  944. * @param Zend_Pdf_Color $color
  945. * @return Zend_Pdf_Page
  946. */
  947. public function setLineColor(Zend_Pdf_Color $color);
  948. ]]></programlisting>
  949. <programlisting language="php"><![CDATA[
  950. /**
  951. * Get line color.
  952. *
  953. * @return Zend_Pdf_Color|null
  954. */
  955. public function getLineColor();
  956. ]]></programlisting>
  957. <programlisting language="php"><![CDATA[
  958. /**
  959. * Set line width.
  960. *
  961. * @param float $width
  962. * @return Zend_Pdf_Page
  963. */
  964. public function setLineWidth($width);
  965. ]]></programlisting>
  966. <programlisting language="php"><![CDATA[
  967. /**
  968. * Get line width.
  969. *
  970. * @return float
  971. */
  972. public function getLineWidth();
  973. ]]></programlisting>
  974. <programlisting language="php"><![CDATA[
  975. /**
  976. * Set line dashing pattern
  977. *
  978. * @param array $pattern
  979. * @param float $phase
  980. * @return Zend_Pdf_Page
  981. */
  982. public function setLineDashingPattern($pattern, $phase = 0);
  983. ]]></programlisting>
  984. <programlisting language="php"><![CDATA[
  985. /**
  986. * Get line dashing pattern
  987. *
  988. * @return array
  989. */
  990. public function getLineDashingPattern();
  991. ]]></programlisting>
  992. <programlisting language="php"><![CDATA[
  993. /**
  994. * Get line dashing phase
  995. *
  996. * @return float
  997. */
  998. public function getLineDashingPhase();
  999. ]]></programlisting>
  1000. <programlisting language="php"><![CDATA[
  1001. /**
  1002. * Set fill color.
  1003. *
  1004. * @param Zend_Pdf_Color $color
  1005. * @return Zend_Pdf_Page
  1006. */
  1007. public function setFillColor(Zend_Pdf_Color $color);
  1008. ]]></programlisting>
  1009. <programlisting language="php"><![CDATA[
  1010. /**
  1011. * Get fill color.
  1012. *
  1013. * @return Zend_Pdf_Color|null
  1014. */
  1015. public function getFillColor();
  1016. ]]></programlisting>
  1017. <programlisting language="php"><![CDATA[
  1018. /**
  1019. * Set current font.
  1020. *
  1021. * @param Zend_Pdf_Resource_Font $font
  1022. * @param float $fontSize
  1023. * @return Zend_Pdf_Page
  1024. */
  1025. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  1026. ]]></programlisting>
  1027. <programlisting language="php"><![CDATA[
  1028. /**
  1029. * Modify current font size
  1030. *
  1031. * @param float $fontSize
  1032. * @return Zend_Pdf_Page
  1033. */
  1034. public function setFontSize($fontSize);
  1035. ]]></programlisting>
  1036. <programlisting language="php"><![CDATA[
  1037. /**
  1038. * Get current font.
  1039. *
  1040. * @return Zend_Pdf_Resource_Font $font
  1041. */
  1042. public function getFont();
  1043. ]]></programlisting>
  1044. <programlisting language="php"><![CDATA[
  1045. /**
  1046. * Get current font size
  1047. *
  1048. * @return float $fontSize
  1049. */
  1050. public function getFontSize();
  1051. ]]></programlisting>
  1052. </sect2>
  1053. <sect2 id="zend.pdf.drawing.alpha">
  1054. <title>Transparency</title>
  1055. <para>
  1056. <classname>Zend_Pdf</classname> module supports transparency handling.
  1057. </para>
  1058. <para>
  1059. Transparency may be set using <methodname>Zend_Pdf_Page::setAlpha()</methodname> method:
  1060. <programlisting language="php"><![CDATA[
  1061. /**
  1062. * Set the transparency
  1063. *
  1064. * $alpha == 0 - transparent
  1065. * $alpha == 1 - opaque
  1066. *
  1067. * Transparency modes, supported by PDF:
  1068. * Normal (default), Multiply, Screen, Overlay, Darken, Lighten,
  1069. * ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion
  1070. *
  1071. * @param float $alpha
  1072. * @param string $mode
  1073. * @throws Zend_Pdf_Exception
  1074. * @return Zend_Pdf_Page
  1075. */
  1076. public function setAlpha($alpha, $mode = 'Normal');
  1077. ]]></programlisting>
  1078. </para>
  1079. </sect2>
  1080. </sect1>