Zend_Pdf-Drawing.xml 43 KB

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