Zend_Pdf-Drawing.xml 43 KB

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