Zend_Pdf-Drawing.xml 43 KB

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