Zend_Pdf-Drawing.xml 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.pdf.drawing">
  5. <title>Dibujo</title>
  6. <sect2 id="zend.pdf.drawing.geometry">
  7. <title>Geometría</title>
  8. <para> PDF utiliza la misma geometría que PostScript. Se inicia desde la
  9. parte inferior izquierda de la página y por defecto se mide en
  10. puntos (1/72 de pulgada). </para>
  11. <para> El tamaño de la página se puede recuperar desde un objeto página: </para>
  12. <para>
  13. <programlisting language="php"><![CDATA[
  14. $width = $pdfPage->getWidth();
  15. $height = $pdfPage->getHeight();
  16. ]]></programlisting>
  17. </para>
  18. </sect2>
  19. <sect2 id="zend.pdf.drawing.color">
  20. <title>Colores</title>
  21. <para> PDF tiene una poderosa capacidad de representación de colores. El
  22. módulo <classname>Zend_Pdf</classname> soporta la Escala de Grises,
  23. y los espacios de color RGB y CMYK. Cualquiera de ellos puede ser
  24. usado en cualquier lugar, donde el objeto
  25. <classname>Zend_Pdf_Color</classname> sea requerido. Las clases
  26. <classname>Zend_Pdf_Color_GrayScale</classname>,
  27. <classname>Zend_Pdf_Color_Rgb</classname> y
  28. <classname>Zend_Pdf_Color_Cmyk</classname> proporcionan esta
  29. funcionalidad: </para>
  30. <programlisting language="php"><![CDATA[
  31. // $grayLevel (float number). 0.0 (black) - 1.0 (white)
  32. $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
  33. // $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
  34. $color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
  35. // $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
  36. $color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
  37. ]]></programlisting>
  38. <para> Los estilos de colores HTML también se proporcionan con la clase
  39. <classname>Zend_Pdf_Color_Html</classname>: </para>
  40. <programlisting language="php"><![CDATA[
  41. $color1 = new Zend_Pdf_Color_Html('#3366FF');
  42. $color2 = new Zend_Pdf_Color_Html('silver');
  43. $color3 = new Zend_Pdf_Color_Html('forestgreen');
  44. ]]></programlisting>
  45. </sect2>
  46. <sect2 id="zend.pdf.drawing.shape-drawing">
  47. <title>Dibujo de Formas</title>
  48. <para> Todas las operaciones de dibujo se puede hacer en un contexto de
  49. página PDF. </para>
  50. <para> La clase <classname>Zend_Pdf_Page</classname> proporciona un
  51. conjunto de primitivas de dibujo: </para>
  52. <programlisting language="php"><![CDATA[
  53. /**
  54. * Dibujar una línea desde x1,y1 hasta x2,y2.
  55. *
  56. * @param float $x1
  57. * @param float $y1
  58. * @param float $x2
  59. * @param float $y2
  60. * @return Zend_Pdf_Page
  61. */
  62. public function drawLine($x1, $y1, $x2, $y2);
  63. ]]></programlisting>
  64. <programlisting language="php"><![CDATA[
  65. /**
  66. * Dibujar un rectángulo.
  67. *
  68. * Rellenar los tipos:
  69. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - rellenar el rectángulo
  70. * y delinearlo (por defecto)
  71. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - delinear el rectángulo
  72. * Zend_Pdf_Page::SHAPE_DRAW_FILL - rellenar el rectángulo
  73. *
  74. * @param float $x1
  75. * @param float $y1
  76. * @param float $x2
  77. * @param float $y2
  78. * @param integer $fillType
  79. * @return Zend_Pdf_Page
  80. */
  81. public function drawRectangle($x1, $y1, $x2, $y2,
  82. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  83. ]]></programlisting>
  84. <programlisting language="php"><![CDATA[
  85. /**
  86. * Dibujar un polígono.
  87. *
  88. * Si $fillType es Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE o
  89. * Zend_Pdf_Page::SHAPE_DRAW_FILL, entonces el polígono se cierra automáticamente.
  90. * Véase la descripción detallada de estos métodos en la documentación de PDF
  91. * (sección 4.4.2 Path painting Operators, Filling)
  92. *
  93. * @param array $x - array de float (la coordenada X de los vértices)
  94. * @param array $y - array de float (la coordenada Y de los vértices)
  95. * @param integer $fillType
  96. * @param integer $fillMethod
  97. * @return Zend_Pdf_Page
  98. */
  99. public function drawPolygon($x, $y,
  100. $fillType =
  101. Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  102. $fillMethod =
  103. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  104. ]]></programlisting>
  105. <programlisting language="php"><![CDATA[
  106. /**
  107. * Dibujar un círculo centrado en X, y con un radio de radius.
  108. *
  109. * Los ángulos están especificados en radianes.
  110. *
  111. * Firmas del Método::
  112. * drawCircle($x, $y, $radius);
  113. * drawCircle($x, $y, $radius, $fillType);
  114. * drawCircle($x, $y, $radius, $startAngle, $endAngle);
  115. * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
  116. *
  117. *
  118. * No es un círculo de verdad, porque PDF sólo admite curvas cúbicss de Bezier,
  119. * pero con muy buena aproximación.
  120. * Se distingue de un verdadero círculo en un máximo de 0.00026 radios (en PI/8,
  121. * 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 y 15*PI/8 ángulos).
  122. * A 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 y 7*PI/4 es exactamente
  123. * la tangente a un círculo.
  124. *
  125. * @param float $x
  126. * @param float $y
  127. * @param float $radius
  128. * @param mixed $param4
  129. * @param mixed $param5
  130. * @param mixed $param6
  131. * @return Zend_Pdf_Page
  132. */
  133. public function drawCircle($x,
  134. $y,
  135. $radius,
  136. $param4 = null,
  137. $param5 = null,
  138. $param6 = null);
  139. ]]></programlisting>
  140. <programlisting language="php"><![CDATA[
  141. /**
  142. * Dibujar una elipse dentro del rectángulo especificado.
  143. *
  144. * Firmas del método:
  145. * drawEllipse($x1, $y1, $x2, $y2);
  146. * drawEllipse($x1, $y1, $x2, $y2, $fillType);
  147. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  148. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
  149. *
  150. * Los ángulos se especifican en radianes
  151. *
  152. * @param float $x1
  153. * @param float $y1
  154. * @param float $x2
  155. * @param float $y2
  156. * @param mixed $param5
  157. * @param mixed $param6
  158. * @param mixed $param7
  159. * @return Zend_Pdf_Page
  160. */
  161. public function drawEllipse($x1,
  162. $y1,
  163. $x2,
  164. $y2,
  165. $param5 = null,
  166. $param6 = null,
  167. $param7 = null);
  168. ]]></programlisting>
  169. </sect2>
  170. <sect2 id="zend.pdf.drawing.text-drawing">
  171. <title>Dibujo de Texto</title>
  172. <para> Las operaciones de dibujo de texto también existen en el contexto
  173. de una página PDF. Puede dibujar una sola línea de texto en
  174. cualquier posición en la página mediante el suministro de las
  175. coordenadas X e Y de la base de referencia. La fuente y tamaño
  176. actual de la letra se utilizan para operaciones de dibujo de texto
  177. (ver descripción detallada más abajo). </para>
  178. <programlisting language="php"><![CDATA[
  179. /**
  180. * Dibujar una línea de texto en una posición específica.
  181. *
  182. * @param string $text
  183. * @param float $x
  184. * @param float $y
  185. * @param string $charEncoding (opcional) Codificación de caracteres del texto
  186. * fuente. El valor por defecto es la codificación actual y local.
  187. * @throws Zend_Pdf_Exception
  188. * @return Zend_Pdf_Page
  189. */
  190. public function drawText($text, $x, $y, $charEncoding = '');
  191. ]]></programlisting>
  192. <example id="zend.pdf.drawing.text-drawing.example-1">
  193. <title>Dibujar un string en la página</title>
  194. <programlisting language="php"><![CDATA[
  195. ...
  196. $pdfPage->drawText('Hello world!', 72, 720);
  197. ...
  198. ]]></programlisting>
  199. </example>
  200. <para> Por defecto, los strings de texto se interpretan usando el método
  201. de codificación de la localización actual. Si tiene un string que
  202. utiliza un método de codificación diferente (como un string UTF-8 a
  203. leer desde un archivo en disco, o un string MacRoman obtenido a
  204. partir del legado de una base de datos), puede indicar la
  205. codificación de caracteres a llamar en tiempo de dibujo y
  206. <classname>Zend_Pdf</classname> se encargará de la conversión.
  207. Puede proporcionar la fuente de cualquier método de codificación de
  208. strings soportados por la función de <acronym>PHP</acronym>
  209. <code>
  210. <ulink url="http://www.php.net/manual/function.iconv.php"
  211. >iconv()</ulink>
  212. </code>: </para>
  213. <example id="zend.pdf.drawing.text-drawing.example-2">
  214. <title>Dibujar un string codificado en UTF-8 en la página</title>
  215. <programlisting language="php"><![CDATA[
  216. ...
  217. // Leer del disco un string codificado en UTF-8
  218. $unicodeString = fread($fp, 1024);
  219. // Dibujar un string en la página
  220. $pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');
  221. ...
  222. ]]></programlisting>
  223. </example>
  224. </sect2>
  225. <sect2 id="zend.pdf.drawing.using-fonts">
  226. <title>Uso de Fuentes</title>
  227. <para>
  228. <classname>Zend_Pdf_Page::drawText()</classname> utiliza la fuente y
  229. el tamaño actual de la fuente de la página, que se establece con el
  230. método <classname>Zend_Pdf_Page::setFont()</classname>: </para>
  231. <programlisting language="php"><![CDATA[
  232. /**
  233. * Establecer la fuente actual.
  234. *
  235. * @param Zend_Pdf_Resource_Font $font
  236. * @param float $fontSize
  237. * @return Zend_Pdf_Page
  238. */
  239. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  240. ]]></programlisting>
  241. <para> Los documentos PDF soportan fuentes PostScript Type 1 y TrueType,
  242. así como dos tipos especializados de PDF, Type 3 y fuentes
  243. compuestas. También hay 14 fuentes estándar Tipo 1 incorporadas para
  244. cada visor PDF: Courier (4 estilos), Helvetica (4 estilos), Times (4
  245. estilos), Symbol y Zapf Dingbats. </para>
  246. <para>
  247. <classname>Zend_Pdf</classname> actualmente soporta el estándar de
  248. 14 fuentes PDF, así como sus propias fuentes personalizadas
  249. TrueType. Los objetos Font se obtienen a través de una de los dos
  250. métodos de fábrica:
  251. <classname>Zend_Pdf_Font::fontWithName($fontName)</classname>
  252. para las 14 fuentes estándar PDF o
  253. <classname>Zend_Pdf_Font::fontWithPath($filePath)</classname>
  254. para fuentes personalizadas. </para>
  255. <example id="zend.pdf.drawing.using-fonts.example-1">
  256. <title>Crear un tipo de letra normal</title>
  257. <programlisting language="php"><![CDATA[
  258. ...
  259. // Crear una fuente nueva
  260. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  261. // Aplicar la fuente
  262. $pdfPage->setFont($font, 36);
  263. ...
  264. ]]></programlisting>
  265. </example>
  266. <para> Los nombres de las 14 constantes para el tipo de letra estándar
  267. de PDF se definen en la clase <classname>Zend_Pdf_Font</classname>: <itemizedlist>
  268. <listitem>
  269. <para>Zend_Pdf_Font::FONT_COURIER</para>
  270. </listitem>
  271. <listitem>
  272. <para>Zend_Pdf_Font::FONT_COURIER_BOLD</para>
  273. </listitem>
  274. <listitem>
  275. <para>Zend_Pdf_Font::FONT_COURIER_ITALIC</para>
  276. </listitem>
  277. <listitem>
  278. <para>Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC</para>
  279. </listitem>
  280. <listitem>
  281. <para>Zend_Pdf_Font::FONT_TIMES</para>
  282. </listitem>
  283. <listitem>
  284. <para>Zend_Pdf_Font::FONT_TIMES_BOLD</para>
  285. </listitem>
  286. <listitem>
  287. <para>Zend_Pdf_Font::FONT_TIMES_ITALIC</para>
  288. </listitem>
  289. <listitem>
  290. <para>Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC</para>
  291. </listitem>
  292. <listitem>
  293. <para>Zend_Pdf_Font::FONT_HELVETICA</para>
  294. </listitem>
  295. <listitem>
  296. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLD</para>
  297. </listitem>
  298. <listitem>
  299. <para>Zend_Pdf_Font::FONT_HELVETICA_ITALIC</para>
  300. </listitem>
  301. <listitem>
  302. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC</para>
  303. </listitem>
  304. <listitem>
  305. <para>Zend_Pdf_Font::FONT_SYMBOL</para>
  306. </listitem>
  307. <listitem>
  308. <para>Zend_Pdf_Font::FONT_ZAPFDINGBATS</para>
  309. </listitem>
  310. </itemizedlist>
  311. </para>
  312. <para> También puede utilizar cualquier fuente individual TrueType (que
  313. generalmente tiene una extensión '.ttf') o bien una fuente OpenType
  314. (con la extensión '.otf') si contiene esquemas TrueType. Actualmente
  315. no están soportadas, pero está previsto para una versión futura
  316. archivos de fuentes .dfont de Mac OS X y de Microsoft TrueType
  317. Collection(extensión '.ttc'). </para>
  318. <para> Para utilizar una fuente TrueType, debe proporcionar toda la ruta
  319. del archivo a la fuente del programa. Si la fuente no se puede leer
  320. por alguna razón, o si no es una fuente TrueType, el método de
  321. fábrica arrojará una excepción: </para>
  322. <example id="zend.pdf.drawing.using-fonts.example-2">
  323. <title>Crear una fuente TrueType</title>
  324. <programlisting language="php"><![CDATA[
  325. ...
  326. // Crear una nueva fuente
  327. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF');
  328. // Aplicar la fuente
  329. $pdfPage->setFont($goodDogCoolFont, 36);
  330. ...
  331. ]]></programlisting>
  332. </example>
  333. <para> Por defecto, las fuentes personalizadas serán incorporados en el
  334. documento PDF resultante. Esto permite que los destinatarios vean la
  335. página como está previsto, incluso si no tienen los tipos de letra
  336. apropiados instalados en su sistema. Si le preocupa el tamaño del
  337. archivo, puede pedir que la fuente del programa no sea integrada
  338. pasando una opción 'do not embed' ("no incluir") al método de
  339. fábrica: </para>
  340. <example id="zend.pdf.drawing.using-fonts.example-3">
  341. <title>Crear una fuente TrueType, pero no incluirla en el documento
  342. PDF.</title>
  343. <programlisting language="php"><![CDATA[
  344. ...
  345. // Crear una nueva fuente
  346. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF',
  347. Zend_Pdf_Font::EMBED_DONT_EMBED);
  348. // Aplicar la fuente
  349. $pdfPage->setFont($goodDogCoolFont, 36);
  350. ...
  351. ]]></programlisting>
  352. </example>
  353. <para> Si el programa no es de fuentes incrustadas, pero el destinatario
  354. del archivo PDF tiene instalada la fuente en su sistema, va a ver el
  355. documento como estaba previsto. Si no tiene la fuente correcta
  356. instalada, la aplicación del visor de PDF hará todo lo posible para
  357. sintetizar un sustituto. </para>
  358. <para> Algunas fuentes tienen normas específicas de concesión de
  359. licencias que les impiden ser tenidas en cuenta en documentos PDF.
  360. Así que no son capturados con la "guardia baja" por la presente, si
  361. intenta utilizar una fuente que no puede ser incorporada, el método
  362. de fábrica lanzará una excepción. </para>
  363. <para> Puede seguir utilizando esas fuentes, pero debe pasar el flag de
  364. no incluir como se ha descripto anteriormente, o simplemente puede
  365. suprimir la excepción: </para>
  366. <example id="zend.pdf.drawing.using-fonts.example-4">
  367. <title>No arrojar una excepción para las fuentes que no puedan ser
  368. incorporadas.</title>
  369. <programlisting language="php"><![CDATA[
  370. ...
  371. $font = Zend_Pdf_Font::fontWithPath(
  372. '/path/to/unEmbeddableFont.ttf',
  373. Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
  374. );
  375. ...
  376. ]]></programlisting>
  377. </example>
  378. <para> Esta técnica de supresión se prefiere si va a permitir a un
  379. usuario final a elegir sus propios tipos de letra. Las fuentes que
  380. puedan ser embebidas en el documento PDF, lo harán, aquellos que no
  381. puedan, no. </para>
  382. <para> Los de programas de fuentes pueden ser bastante grandes, algunas
  383. llegan a decenas de megabytes. Por defecto, todas las fuentes
  384. incorporadas son comprimidas utilizando el esquema de compresión
  385. Flate, lo que resulta en un ahorro de espacio del 50% en promedio.
  386. Si, por alguna razón, no desea comprimir la fuente del programa, se
  387. puede desactivar con una opción: </para>
  388. <example id="zend.pdf.drawing.using-fonts.example-5">
  389. <title>No comprimir una fuente incrustada.</title>
  390. <programlisting language="php"><![CDATA[
  391. ...
  392. $font = Zend_Pdf_Font::fontWithPath('/path/to/someReallyBigFont.ttf',
  393. Zend_Pdf_Font::EMBED_DONT_COMPRESS);
  394. ...
  395. ]]></programlisting>
  396. </example>
  397. <para> Por último, en caso necesario, puede combinar las opciones de la
  398. integración mediante el operador binario OR: </para>
  399. <example id="zend.pdf.drawing.using-fonts.example-6">
  400. <title>La combinación de opciones de la incrustación de
  401. fuentes.</title>
  402. <programlisting language="php"><![CDATA[
  403. ...
  404. $font = Zend_Pdf_Font::fontWithPath(
  405. $someUserSelectedFontPath,
  406. (Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION |
  407. Zend_Pdf_Font::EMBED_DONT_COMPRESS));
  408. ...
  409. ]]></programlisting>
  410. </example>
  411. </sect2>
  412. <sect2 id="zend.pdf.drawing.standard-fonts-limitations">
  413. <title>Limitaciones de las fuentes PDF estándar.</title>
  414. <para> Las fuentes estándar PDF utilizan internamente varias
  415. codificaciones de un solo byte (véase <ulink
  416. url="http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf"
  417. >PDF Reference, Sixth Edition, version 1.7</ulink> Apéndice D
  418. para más detalles). Son, en general, igual al conjunto de caracteres
  419. Latin1 (excepto las fuentes ZapfDingbats y Symbol). </para>
  420. <para>
  421. <classname>Zend_Pdf</classname> usa CP1252 (WinLatin1) para dibujar
  422. el texto con las fuentes estándar. </para>
  423. <para> El texto todavía se puede proporcionar en cualquier otra
  424. codificación, que debe ser especificada si ésta es distinto de una
  425. fuente local actual. Realmente, sólo se dibujarán caracteres
  426. WinLatin1. </para>
  427. <example id="zend.pdf.drawing.using-fonts.example-7">
  428. <title>Combinación de opciones de la incrustación de
  429. fuentes.</title>
  430. <programlisting language="php"><![CDATA[
  431. ...
  432. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER);
  433. $pdfPage->setFont($font, 36)
  434. ->drawText('Euro sign - €', 72, 720, 'UTF-8')
  435. ->drawText('Text with umlauts - à è ì', 72, 650, 'UTF-8');
  436. ...
  437. ]]></programlisting>
  438. </example>
  439. </sect2>
  440. <sect2 id="zend.pdf.drawing.extracting-fonts">
  441. <title>Extracción de las fuentes.</title>
  442. <para> El módulo <classname>Zend_Pdf</classname> proporciona una
  443. posibilidad de extraer las fuentes de los documentos cargados. </para>
  444. <para> Puede ser útil para las actualizaciones incrementales de un
  445. documento. Sin esta funcionalidad tiene que agregar y posiblemente,
  446. incrustar una fuente en un documento cada vez que desee
  447. actualizarlo. </para>
  448. <para> Los objetos <classname>Zend_Pdf</classname> y
  449. <classname>Zend_Pdf_Page</classname> proporcionan métodos
  450. especiales para extraer todas las fuentes mencionadas en un
  451. documento o una página: </para>
  452. <example id="zend.pdf.drawing.extracting-fonts.example-1">
  453. <title>Extracción de las fuentes de un documento cargado.</title>
  454. <programlisting language="php"><![CDATA[
  455. ...
  456. $pdf = Zend_Pdf::load($documentPath);
  457. ...
  458. // Obtener todas las fuentes del documento
  459. $fontList = $pdf->extractFonts();
  460. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  461. $yPosition = 700;
  462. foreach ($fontList as $font) {
  463. $page->setFont($font, 15);
  464. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  465. 'en',
  466. 'UTF-8');
  467. $page->drawText($fontName . ': The quick brown fox jumps over the lazy dog',
  468. 100,
  469. $yPosition,
  470. 'UTF-8');
  471. $yPosition -= 30;
  472. }
  473. ...
  474. // Obtener las fuentes referenciadas dentro de la primera página del documento
  475. $firstPage = reset($pdf->pages);
  476. $firstPageFonts = $firstPage->extractFonts();
  477. ...
  478. ]]></programlisting>
  479. </example>
  480. <example id="zend.pdf.drawing.extracting-fonts.example-2">
  481. <title>Extracción de la fuente de un documento cargado especificando
  482. el nombre de la fuente.</title>
  483. <programlisting language="php"><![CDATA[
  484. ...
  485. $pdf = new Zend_Pdf();
  486. ...
  487. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  488. $font = Zend_Pdf_Font::fontWithPath($fontPath);
  489. $page->setFont($font, $fontSize);
  490. $page->drawText($text, $x, $y);
  491. ...
  492. // Este nombre de fuente debe ser almacenado en algún lugar...
  493. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  494. 'en',
  495. 'UTF-8');
  496. ...
  497. $pdf->save($docPath);
  498. ...
  499. ]]></programlisting>
  500. <programlisting language="php"><![CDATA[
  501. ...
  502. $pdf = Zend_Pdf::load($docPath);
  503. ...
  504. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  505. /* $srcPage->extractFont($fontName) también se puede usar aquí */
  506. $font = $pdf->extractFont($fontName);
  507. $page->setFont($font, $fontSize);
  508. $page->drawText($text, $x, $y);
  509. ...
  510. $pdf->save($docPath, true /* modo de actualización incremental */);
  511. ...
  512. ]]></programlisting>
  513. </example>
  514. <para> Las fuentes extraídas pueden ser utilizadas en el lugar de
  515. cualquier otra fuente con las siguientes limitaciones: <itemizedlist>
  516. <listitem>
  517. <para> La fuente extraída puede ser usada sólo en el
  518. contexto del documento del que se ha extraído. </para>
  519. </listitem>
  520. <listitem>
  521. <para> Posiblemente, el programa no extraiga realmente la
  522. fuente incrustada. Así que las fuentes extraídas no
  523. pueden proporcionar métricas correctas y la fuente
  524. original tiene que ser utilizada para los cálculos de
  525. ancho de texto: <programlisting language="php"><![CDATA[
  526. ...
  527. $font = $pdf->extractFont($fontName);
  528. $originalFont = Zend_Pdf_Font::fontWithPath($fontPath);
  529. $page->setFont($font /* usar la fuente extraída para dibujar */, $fontSize);
  530. $xPosition = $x;
  531. for ($charIndex = 0; $charIndex < strlen($text); $charIndex++) {
  532. $page->drawText($text[$charIndex], xPosition, $y);
  533. // Usar la fuente original para calcular el ancho del texto
  534. $width = $originalFont->widthForGlyph(
  535. $originalFont->glyphNumberForCharacter($text[$charIndex])
  536. );
  537. $xPosition += $width/$originalFont->getUnitsPerEm()*$fontSize;
  538. }
  539. ...
  540. ]]></programlisting>
  541. </para>
  542. </listitem>
  543. </itemizedlist>
  544. </para>
  545. </sect2>
  546. <sect2 id="zend.pdf.drawing.image-drawing">
  547. <title>Dibujo de Imágenes</title>
  548. <para> La clase <classname>Zend_Pdf_Page</classname> proporciona el
  549. método drawImage() para dibujar la imagen: </para>
  550. <programlisting language="php"><![CDATA[
  551. /**
  552. * Dibujar una imagen en una posición específica de la página.
  553. *
  554. * @param Zend_Pdf_Resource_Image $image
  555. * @param float $x1
  556. * @param float $y1
  557. * @param float $x2
  558. * @param float $y2
  559. * @return Zend_Pdf_Page
  560. */
  561. public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);
  562. ]]></programlisting>
  563. <para> Los objetos imagen deben ser creados con el método
  564. <classname>Zend_Pdf_Image::imageWithPath($filePath)</classname>
  565. (imágenes JPG, PNG y TIFF ahora son soportadas): </para>
  566. <example id="zend.pdf.drawing.image-drawing.example-1">
  567. <title>Dibujar una imagen</title>
  568. <programlisting language="php"><![CDATA[
  569. ...
  570. // Cargar la imagen
  571. $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
  572. $pdfPage->drawImage($image, 100, 100, 400, 300);
  573. ...
  574. ]]></programlisting>
  575. </example>
  576. <para>
  577. <emphasis>Importante! el soporte a JPEG requiere que se configure la
  578. extensión PHP GD.</emphasis>
  579. <emphasis>Importante! el soporte a PNG requiere que se configure la
  580. extensión ZLIB para trabajar con imágenes canal Alfa.</emphasis>
  581. </para>
  582. <para> Consulte la documentación de <acronym>PHP</acronym> para obtener
  583. información detallada (<ulink
  584. url="http://www.php.net/manual/en/ref.image.php"
  585. >http://www.php.net/manual/en/ref.image.php</ulink>). (<ulink
  586. url="http://www.php.net/manual/en/ref.zlib.php"
  587. >http://www.php.net/manual/en/ref.zlib.php</ulink>). </para>
  588. </sect2>
  589. <sect2 id="zend.pdf.drawing.line-drawing-style">
  590. <title>Estilo de Dibujo de Líneas</title>
  591. <para> El estilo del dibujo de líneas está definido por el ancho de
  592. línea, el color de línea y el patrón del tipo de línea. Todo esto
  593. parámetros pueden ser asignados por los métodos de la clase
  594. <classname>Zend_Pdf_Page</classname>: </para>
  595. <programlisting language="php"><![CDATA[
  596. /** Establecer el color de la línea. */
  597. public function setLineColor(Zend_Pdf_Color $color);
  598. /** Establecer el ancho de la línea. */
  599. public function setLineWidth(float $width);
  600. /**
  601. * Establecer el patrón de líneas de guiones.
  602. *
  603. * El patrón es una array de números de punto flotante:
  604. * array(on_length, off_length, on_length, off_length, ...)
  605. * La fase está desplazada lateralmente desde el comienzo de la línea.
  606. *
  607. * @param array $pattern
  608. * @param array $phase
  609. * @return Zend_Pdf_Page
  610. */
  611. public function setLineDashingPattern($pattern, $phase = 0);
  612. ]]></programlisting>
  613. </sect2>
  614. <sect2 id="zend.pdf.drawing.fill-style">
  615. <title>Estilo Relleno</title>
  616. <para> Los métodos
  617. <classname>Zend_Pdf_Page::drawRectangle()</classname>,
  618. <classname>Zend_Pdf_Page::drawPolygon()</classname>,
  619. <classname>Zend_Pdf_Page::drawCircle()</classname> y
  620. <classname>Zend_Pdf_Page::drawEllipse()</classname> toman el
  621. argumento <methodname>$fillType</methodname> como un parámetro
  622. opcional. Puede ser: </para>
  623. <itemizedlist>
  624. <listitem>
  625. <para>Zend_Pdf_Page::SHAPE_DRAW_STROKE - forma del trazo</para>
  626. </listitem>
  627. <listitem>
  628. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL - sólo llenar la
  629. forma</para>
  630. </listitem>
  631. <listitem>
  632. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - llenar y
  633. trazar (comportamiento por defecto)</para>
  634. </listitem>
  635. </itemizedlist>
  636. <para> El método <classname>Zend_Pdf_Page::drawPolygon()</classname>
  637. también tiene un parámetro adicional
  638. <methodname>$fillMethod</methodname>: </para>
  639. <itemizedlist>
  640. <listitem>
  641. <para>Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING
  642. (comportamiento por defecto)</para>
  643. <para>
  644. <citetitle>PDF reference</citetitle> esta norma se describe
  645. como sigue: <blockquote>
  646. <para> La tortuosa regla del número distinto de cero
  647. determina si un punto está dentro de un camino de un
  648. rayo conceptual dibujado a partir de ese punto hasta
  649. el infinito en cualquier dirección y luego de
  650. examinar los lugares en los que un segmento de la
  651. ruta atraviesa el rayo. A partir de la cuenta de 0,
  652. la norma agrega 1 cada vez que un segmento de ruta
  653. atraviesa el rayo de izquierda a derecha y resta 1
  654. cada vez que un segmento cruza de derecha a
  655. izquierda. Después de contar todos los cruces, si el
  656. resultado es 0, entonces el punto está fuera del
  657. camino; otra cosa es el interior. Nota: El método
  658. que acabamos de describir no especifica qué hacer si
  659. un segmento de ruta coincide con o es tangente al
  660. rayo elegido. Dado que la dirección de los rayos es
  661. arbitraria, la regla simplemente elige un rayo que
  662. no encuentre problemas con las intersecciones. Por
  663. simples caminos convexos, la regla del tortuoso
  664. número distinto de cero define el dentro y afuera
  665. como uno lo espera intuitivamente. Los casos más
  666. interesantes son aquellos que involucran la
  667. complejidad o las rutas auto-intersectadas como las
  668. que se muestran en la Figura 4.10 (en un PDF de
  669. referencia). Para un camino que consiste en una
  670. estrella de cinco puntas, dibujado con cinco
  671. segmentos conectados de líneas rectas
  672. intersectándose entre sí, la regla considera que el
  673. interior será toda el área delimitada por la
  674. estrella, incluido el pentágono en el centro. Para
  675. un camino compuesto por dos círculos concéntricos,
  676. las áreas de ambos círculos cerrados se consideran
  677. que están adentro, siempre que ambas se hayan
  678. dibujado en la misma dirección. Si los círculos son
  679. dibujados en direcciones opuestas, sólo la forma de
  680. "doughnut" (rosquilla) formada entre ellos es el
  681. interior, de acuerdo a la norma, el "agujero de la
  682. rosquilla" está afuera. </para>
  683. </blockquote>
  684. </para>
  685. </listitem>
  686. <listitem>
  687. <para>Zend_Pdf_Page::FILL_METHOD_EVEN_ODD</para>
  688. <para>
  689. <citetitle>PDF reference</citetitle> describe esta norma
  690. como sigue: <blockquote>
  691. <para> Una alternativa al tortuoso número distinto de
  692. cero es la regla par-impar. Esta norma determina la
  693. "interioridad" de un punto por el dibujo de un rayo
  694. desde ese punto en cualquier dirección y simplemente
  695. contando el número de segmentos de ruta que
  696. atraviesan los rayos, independientemente de la
  697. dirección. Si este número es impar, el punto está
  698. adentro, si es par, el punto está afuera. Esto
  699. produce los mismos resultados que la regla del
  700. tortuoso número distinto de cero para caminos con
  701. formas simples, pero produce resultados diferentes
  702. para formas más complejas. La Figura 4.11 (en un PDF
  703. de referencia) muestra los efectos de la aplicación
  704. de la regla par-impar a las rutas complejss. Para la
  705. estrella de cinco puntas, la regla considera que los
  706. puntos del triángulo están dentro de la ruta, pero
  707. no el pentágono en el centro. Para los dos círculos
  708. concéntricos, sólo la forma de la "rosquilla" entre
  709. los dos círculo está considerada adentro,
  710. independientemente de las direcciones en las que se
  711. dibujen los círculos. </para>
  712. </blockquote>
  713. </para>
  714. </listitem>
  715. </itemizedlist>
  716. </sect2>
  717. <sect2 id="zend.pdf.drawing.linear-transformations">
  718. <title>Transformaciones Lineales</title>
  719. <sect3 id="zend.pdf.drawing.linear-transformations.rotations">
  720. <title>Rotaciones.</title>
  721. <para> La página PDF se puede rotar antes de aplicar cualquier
  722. operación de dibujo. Se puede hacer con el método
  723. <classname>Zend_Pdf_Page::rotate()</classname>: </para>
  724. <programlisting language="php"><![CDATA[
  725. /**
  726. * Rotar la página.
  727. *
  728. * @param float $x - la coordenada X del punto de rotación
  729. * @param float $y - la coordenada Y del punto de rotación
  730. * @param float $angle - ángulo de rotación
  731. * @return Zend_Pdf_Page
  732. */
  733. public function rotate($x, $y, $angle);
  734. ]]></programlisting>
  735. </sect3>
  736. <sect3 id="zend.pdf.drawing.linear-transformations.scale">
  737. <title>A partir de ZF 1.8, el escalado.</title>
  738. <para> La escala de transformación es proporcionada por el método:
  739. <classname>Zend_Pdf_Page::scale()</classname>: </para>
  740. <programlisting language="php"><![CDATA[
  741. /**
  742. * Establecer la escala al sistema de coordenadas.
  743. *
  744. * @param float $xScale - factor de escala de la dimensión X
  745. * @param float $yScale - factor de escala de la dimensión Y
  746. * @return Zend_Pdf_Page
  747. */
  748. public function scale($xScale, $yScale);
  749. ]]></programlisting>
  750. </sect3>
  751. <sect3 id="zend.pdf.drawing.linear-transformations.translate">
  752. <title>A partir de ZF 1.8, traducir.</title>
  753. <para> El desplazamiento del sistema de coordenadas es realizado por
  754. el método <classname>Zend_Pdf_Page::translate()</classname>: </para>
  755. <programlisting language="php"><![CDATA[
  756. /**
  757. * Traducir sistema de coordenadas.
  758. *
  759. * @param float $xShift - desplazamiento de la coordenada X
  760. * @param float $yShift - desplazamiento de la coordenada Y
  761. * @return Zend_Pdf_Page
  762. */
  763. public function translate($xShift, $yShift);
  764. ]]></programlisting>
  765. </sect3>
  766. <sect3 id="zend.pdf.drawing.linear-transformations.skew">
  767. <title>A partir de ZF 1.8, el sesgo.</title>
  768. <para> El sesgo de una página se puede hacer utilizando el método
  769. <classname>Zend_Pdf_Page::skew()</classname>: </para>
  770. <programlisting language="php"><![CDATA[
  771. /**
  772. * Traducir sistema de coordenadas.
  773. *
  774. * @param float $x - la coordenada X del eje del punto de sesgo
  775. * @param float $y - la coordenada Y del eje del punto de sesgo
  776. * @param float $xAngle - ángulo de sesgo en el eje X
  777. * @param float $yAngle - ángulo de sesgo en el eje Y
  778. * @return Zend_Pdf_Page
  779. */
  780. public function skew($x, $y, $xAngle, $yAngle);
  781. ]]></programlisting>
  782. </sect3>
  783. </sect2>
  784. <sect2 id="zend.pdf.drawing.save-restore">
  785. <title>Guardar/Restaurar el estado de los gráficos.</title>
  786. <para> En cualquier momento el estado de la página de gráficos (fuente
  787. actual, tamaño de la fuente, color de línea, color de relleno,
  788. estilo de línea, rotación de la página, clip del área) se pueden
  789. guardar y restaurarlos luego. Guardar la operación pone los datos a
  790. un estado de pila de gráficos, la operación de restauración se
  791. recupera a partir de ahí. </para>
  792. <para> Existen dos métodos en la clase
  793. <classname>Zend_Pdf_Page</classname> para estas operaciones: </para>
  794. <programlisting language="php"><![CDATA[
  795. /**
  796. * Salva el estado de los gráficos de esta página.
  797. * Esta toma una instantánea del estilo aplicado actualmente, posición,
  798. * área de recorte y cualquier rotación/traducción/escalado que ha sido
  799. * aplicada.
  800. *
  801. * @return Zend_Pdf_Page
  802. */
  803. public function saveGS();
  804. /**
  805. * Restablecer los gráficos que se guardaron con la última llamada a
  806. * saveGS().
  807. *
  808. * @return Zend_Pdf_Page
  809. */
  810. public function restoreGS();
  811. ]]></programlisting>
  812. </sect2>
  813. <sect2 id="zend.pdf.drawing.clipping">
  814. <title>Señalar el área de recorte</title>
  815. <para> PDF y el módulo <classname>Zend_Pdf</classname> dan soporte de
  816. recorte a la zona de dibujo. La zona actual de Clip límita las
  817. regiones de la página de los operadores afectados por la pintura. En
  818. principio, es la página entera. </para>
  819. <para> La clase <classname>Zend_Pdf_Page</classname> proporciona un
  820. conjunto de métodos para las operaciones de recorte. </para>
  821. <programlisting language="php"><![CDATA[
  822. /**
  823. * Intersectar el área actual de recorte con un rectángulo.
  824. *
  825. * @param float $x1
  826. * @param float $y1
  827. * @param float $x2
  828. * @param float $y2
  829. * @return Zend_Pdf_Page
  830. */
  831. public function clipRectangle($x1, $y1, $x2, $y2);
  832. ]]></programlisting>
  833. <programlisting language="php"><![CDATA[
  834. /**
  835. * Intersectar el área actual de recorte con un polígono.
  836. *
  837. * @param array $x - array de float (la coordenada X de los vértices)
  838. * @param array $y - array de float (la coordenada Y de los vértices)
  839. * @param integer $fillMethod
  840. * @return Zend_Pdf_Page
  841. */
  842. public function clipPolygon($x,
  843. $y,
  844. $fillMethod =
  845. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  846. ]]></programlisting>
  847. <programlisting language="php"><![CDATA[
  848. /**
  849. * Intersectar el área actual de recorte con un círculo.
  850. *
  851. * @param float $x
  852. * @param float $y
  853. * @param float $radius
  854. * @param float $startAngle
  855. * @param float $endAngle
  856. * @return Zend_Pdf_Page
  857. */
  858. public function clipCircle($x,
  859. $y,
  860. $radius,
  861. $startAngle = null,
  862. $endAngle = null);
  863. ]]></programlisting>
  864. <programlisting language="php"><![CDATA[
  865. /**
  866. * Intersectar el área actual de recorte con una elipse.
  867. *
  868. * Firmas del método:
  869. * drawEllipse($x1, $y1, $x2, $y2);
  870. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  871. *
  872. * @todo process special cases with $x2-$x1 == 0 or $y2-$y1 == 0
  873. *
  874. * @param float $x1
  875. * @param float $y1
  876. * @param float $x2
  877. * @param float $y2
  878. * @param float $startAngle
  879. * @param float $endAngle
  880. * @return Zend_Pdf_Page
  881. */
  882. public function clipEllipse($x1,
  883. $y1,
  884. $x2,
  885. $y2,
  886. $startAngle = null,
  887. $endAngle = null);
  888. ]]></programlisting>
  889. </sect2>
  890. <sect2 id="zend.pdf.drawing.styles">
  891. <title>Estilos</title>
  892. <para> La clase <classname>Zend_Pdf_Style</classname> proporciona la
  893. funcionalidad de los estilos. </para>
  894. <para> Los estilos se pueden utilizar para almacenar un conjunto de
  895. parámetros de estado del gráfico y aplicarlo a un página PDF por una
  896. operación: </para>
  897. <programlisting language="php"><![CDATA[
  898. /**
  899. * Establecer el estilo a utilizar para futuras operaciones de dibujo sobre esta página
  900. *
  901. * @param Zend_Pdf_Style $style
  902. * @return Zend_Pdf_Page
  903. */
  904. public function setStyle(Zend_Pdf_Style $style);
  905. /**
  906. * Regresar el estilo aplicado a la página.
  907. *
  908. * @return Zend_Pdf_Style|null
  909. */
  910. public function getStyle();
  911. ]]></programlisting>
  912. <para> La clase <classname>Zend_Pdf_Style</classname> proporciona un
  913. conjunto de métodos para obtener o configurar diferentes parámetros
  914. de estado de los gráficos: </para>
  915. <programlisting language="php"><![CDATA[
  916. /**
  917. * Establecer el color de la línea.
  918. *
  919. * @param Zend_Pdf_Color $color
  920. * @return Zend_Pdf_Page
  921. */
  922. public function setLineColor(Zend_Pdf_Color $color);
  923. ]]></programlisting>
  924. <programlisting language="php"><![CDATA[
  925. /**
  926. * Obtener el color de la línea.
  927. *
  928. * @return Zend_Pdf_Color|null
  929. */
  930. public function getLineColor();
  931. ]]></programlisting>
  932. <programlisting language="php"><![CDATA[
  933. /**
  934. * Establecer el ancho de la línea.
  935. *
  936. * @param float $width
  937. * @return Zend_Pdf_Page
  938. */
  939. public function setLineWidth($width);
  940. ]]></programlisting>
  941. <programlisting language="php"><![CDATA[
  942. /**
  943. * Obtener el ancho de la línea.
  944. *
  945. * @return float
  946. */
  947. public function getLineWidth();
  948. ]]></programlisting>
  949. <programlisting language="php"><![CDATA[
  950. /**
  951. * Establecer el patrón de la línea de guiones
  952. *
  953. * @param array $pattern
  954. * @param float $phase
  955. * @return Zend_Pdf_Page
  956. */
  957. public function setLineDashingPattern($pattern, $phase = 0);
  958. ]]></programlisting>
  959. <programlisting language="php"><![CDATA[
  960. /**
  961. * Obtener el patrón de la línea de guiones
  962. *
  963. * @return array
  964. */
  965. public function getLineDashingPattern();
  966. ]]></programlisting>
  967. <programlisting language="php"><![CDATA[
  968. /**
  969. * Obtener la fase de la línea de guiones
  970. *
  971. * @return float
  972. */
  973. public function getLineDashingPhase();
  974. ]]></programlisting>
  975. <programlisting language="php"><![CDATA[
  976. /**
  977. * Establecer el color de relleno.
  978. *
  979. * @param Zend_Pdf_Color $color
  980. * @return Zend_Pdf_Page
  981. */
  982. public function setFillColor(Zend_Pdf_Color $color);
  983. ]]></programlisting>
  984. <programlisting language="php"><![CDATA[
  985. /**
  986. * Obtener el color de relleno.
  987. *
  988. * @return Zend_Pdf_Color|null
  989. */
  990. public function getFillColor();
  991. ]]></programlisting>
  992. <programlisting language="php"><![CDATA[
  993. /**
  994. * Establecer la fuente actual.
  995. *
  996. * @param Zend_Pdf_Resource_Font $font
  997. * @param float $fontSize
  998. * @return Zend_Pdf_Page
  999. */
  1000. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  1001. ]]></programlisting>
  1002. <programlisting language="php"><![CDATA[
  1003. /**
  1004. * Modificar el tamaño de la fuente actual.
  1005. *
  1006. * @param float $fontSize
  1007. * @return Zend_Pdf_Page
  1008. */
  1009. public function setFontSize($fontSize);
  1010. ]]></programlisting>
  1011. <programlisting language="php"><![CDATA[
  1012. /**
  1013. * Obtener la fuente actual.
  1014. *
  1015. * @return Zend_Pdf_Resource_Font $font
  1016. */
  1017. public function getFont();
  1018. ]]></programlisting>
  1019. <programlisting language="php"><![CDATA[
  1020. /**
  1021. * Obtener el tamaño de la fuente actual.
  1022. *
  1023. * @return float $fontSize
  1024. */
  1025. public function getFontSize();
  1026. ]]></programlisting>
  1027. </sect2>
  1028. <sect2 id="zend.pdf.drawing.alpha">
  1029. <title>Transparencia</title>
  1030. <para> El módulo <classname>Zend_Pdf</classname> soporta el manejo de la
  1031. transparencia. </para>
  1032. <para> La transparencia puede ser el método
  1033. <classname>Zend_Pdf_Page::setAlpha()</classname>: <programlisting language="php"><![CDATA[
  1034. /**
  1035. * Establecer la transparencia.
  1036. *
  1037. * $alpha == 0 - transparente
  1038. * $alpha == 1 - opaco
  1039. *
  1040. * Modos de transparencia soportados por PDF:
  1041. * Normal (por defecto), Multiply, Screen, Overlay, Darken, Lighten,
  1042. * ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion
  1043. *
  1044. * @param float $alpha
  1045. * @param string $mode
  1046. * @throws Zend_Pdf_Exception
  1047. * @return Zend_Pdf_Page
  1048. */
  1049. public function setAlpha($alpha, $mode = 'Normal');
  1050. ]]></programlisting>
  1051. </para>
  1052. </sect2>
  1053. </sect1>