Zend_Pdf-Drawing.xml 48 KB

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