Zend_Pdf-Drawing.xml 42 KB

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