<?xml version="1.0" encoding="UTF-8"?><!-- generator="bbPress" -->

<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
>

<channel>
<title>Dudas de cakephp &#187; Tag: debug - Recent Topics</title>
<link>http://cakephp.hospedaxes.com/dudas/</link>
<description>Just another bbPress community</description>
<language>en</language>
<pubDate>Wed, 08 Feb 2012 17:23:34 +0000</pubDate>

<item>
<title>bernal en "Crear pdfs en cakephp utilizando TCPDF"</title>
<link>http://cakephp.hospedaxes.com/dudas/topic/crear-pdfs-en-cakephp-utilizando-tcpdf#post-13</link>
<pubDate>Mie, 08 Jul 2009 06:59:21 +0000</pubDate>
<dc:creator>bernal</dc:creator>
<guid isPermaLink="false">13@http://cakephp.hospedaxes.com/dudas/</guid>
<description>&#60;blockquote&#62;&#60;p&#62;En nuestra experiencia en &#60;a href=&#34;http://www.hospedaxes.com&#34;&#62;desarrollo web&#60;/a&#62;, se nos ha planteado proyectos que tenían como uno de sus requisitos la creación de un archivo pdf generado automáticamente, por ejemplo una factura de compra o un informe de ventas.&#60;/p&#62;
&#60;p&#62;En un principio, comenzamos utilizando &#60;a href=&#34;http://www.fpdf.org&#34;&#62;fpdf&#60;/a&#62;, una clase en php, totalmente gratuíta, que permite crear automáticamente archivos pdf y que además tenía un helper para cakephp 1.1.&#60;/p&#62;
&#60;p&#62;Esta clase funcionaba increíblemente bien, pero como todos los proyectos que no se actualizan regularmente (hasta hace poco llevaban más de 4 años sin realizar cambios), se quedan desfasados.&#60;/p&#62;
&#60;p&#62;Tenía un gran número de desventajas como que no aceptaba codificación UTF-8, o lo complejo que resultaba su uso.&#60;/p&#62;
&#60;p&#62;De este proyecto surgió en 2002 una rama, &#60;a href=&#34;http://tcpdf.sf.net&#34;&#62;TCPDF&#60;/a&#62;. Este proyecto ,también libre y gratuíto, en un principio solucionaba carencias del &#60;a href=&#34;http://www.fpdf.org&#34;&#62;fpdf&#60;/a&#62;, pero finalmente se ha convertido en una versión mucho más potente, con gran cantidad de posibilidades como por ejemplo el soporte de UTF-8 o idiomas de derecha-izquierda, permite la utilización de códigos html e incluye una lista bastante amplia de fuentes libres, que podremos utilizar en nuestro pdf.&#60;/p&#62;
&#60;p&#62;Para incluirlo en uno de nuestros proyectos y empezar a utilizarlo hay que llevar a cabo una serie de pasos bastante sencillos (añadir nuevas funcionalidades a un proyecto cakePHP se ha facilitado en la versión 1.2), en primer lugar bajar la última versión de TCPDF, descomprimirla en el directorio /app/vendors de nuestra aplicación.&#60;/p&#62;
&#60;p&#62;El resultado debería ser /app/vendors/tcpdf/ conteniendo al menos, tcpdf.php y los directorios tcpdf/config y tcpdf/fonts&#60;/p&#62;
&#60;p&#62;En segundo lugar tendremos que crear un layout para los pdf&#38;#8217;s en /app/views/layouts/pdf.ctp, con este contenido&#60;/p&#62;
&#60;pre class=&#34;prettyprint&#34;&#62;header(&#34;Content-type: application/pdf&#34;);
echo $content_for_layout;&#60;/pre&#62;
&#60;p&#62;En el controlador que queramos crear los pdf&#38;#8217;s, crearemos una función para ello&#60;/p&#62;
&#60;pre class=&#34;prettyprint&#34;&#62;function pdf()
{
      Configure::write('debug',0);
      $this-&#62;layout = 'pdf'; //this will use the pdf.ctp layout
      // Operaciones que deseamos realizar y variables que pasaremos a la vista.
      $this-&#62;render();
}&#60;/pre&#62;
&#60;p&#62;Por último una vista para esta función, con el siguiente contenido:&#60;/p&#62;
&#60;pre class=&#34;prettyprint&#34;&#62;App::import('Vendor','tcpdf');
$tcpdf = new TCPDF();
$textfont = 'freesans';
$tcpdf-&#62;SetCreator(PDF_CREATOR);
$tcpdf-&#62;SetAuthor(&#34;autor&#34;);
$tcpdf-&#62;SetTitle(&#34;Título&#34;);
$tcpdf-&#62;SetSubject(&#34;Tutorial TCPDF en cakePHP&#34;);
$tcpdf-&#62;SetKeywords(&#34;TCPDF, PDF, cakePHP, ejemplo&#34;);
$tcpdf-&#62;setPrintHeader(false);
$tcpdf-&#62;setPrintFooter(false);
$tcpdf-&#62;SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$tcpdf-&#62;SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$tcpdf-&#62;setImageScale(PDF_IMAGE_SCALE_RATIO);
$tcpdf-&#62;setLanguageArray($l);
$tcpdf-&#62;AliasNbPages();
$tcpdf-&#62;AddPage();
$tcpdf-&#62;SetFont(&#34;freesans&#34;, &#34;BI&#34;, 20);
$tcpdf-&#62;Cell(0,10,&#34;Hola mundo&#34;,1,1,'C');
$tcpdf-&#62;Output(&#34;ejemplo.pdf&#34;, &#34;I&#34;);&#60;/pre&#62;
&#60;p&#62;En este ejemplo se creará un pdf muy sencillo con un cuadrado con el texto hola mundo dentro.&#60;br /&#62;
Las posibilidades de TCPDF son muchas, para comprobar lo que es capaz de hacer, es recomendable ojear los ejemplos contenidos en la &#60;a href=&#34;http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_examples&#34;&#62;página&#60;/a&#62; y la documentación de la &#60;a href=&#34;http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html&#34;&#62;clase&#60;/a&#62;, que explica el funcionamiento de todos sus métodos.&#60;/p&#62;
&#60;p&#62;En nuestra página de &#60;a href=&#34;http://cakephp.hospedaxes.com/pruebas&#34;&#62;pruebas de cakephp&#60;/a&#62; hay un &#60;a href=&#34;http://cakephp.hospedaxes.com/pruebas/ejemplo_pdf&#34;&#62;ejemplo sencillo&#60;/a&#62; de funcionamiento.&#60;/p&#62;
&#60;p&#62;&#60;strong&#62;Actualización (9/2/2009) :&#60;/strong&#62;&#60;/p&#62;
&#60;p&#62;&#60;strong&#62;Errores frecuentes:&#60;/strong&#62;&#60;/p&#62;
&#60;p&#62;“TCPDF error: Some data has already been output to browser, can’t send PDF file”: Este error se produce cuando cakePHP envía algún dato antes de crear el pdf y enviarlo, esto puede ocurrir por una serie de razones que habrá que comprobar:&#60;/p&#62;
&#60;ul&#62;
&#60;li&#62;Realizar un debug o un echo, en la vista o controlador.Esto crea salida de datos por lo que se genera el error, para eso añadimos en la primera línea de la función del controlador Configure::write(&#38;#8217;debug&#38;#8217;,0); , función que lo que hace es cambiar el nivel de debug a modo producción, donde no se muestra ningún mensaje, ni de error ni warnings.&#60;/li&#62;
&#60;li&#62;Existencia de caracteres de salto de línea o espacios después del símbolo de fín de archivo php, ?&#38;gt;. Para esto hay que comprobar todos los ficheros de nuestro proyecto y borrar todos los caracteres o saltos de línea que haya al final del fichero. Esta suele ser la razón más habitual para este error por lo que debemos comprobar todos los ficheros antes de tirar la toalla con tcpdf.&#60;/li&#62;
&#60;/ul&#62;
&#60;/blockquote&#62;
&#60;p&#62;&#60;br/&#62;&#60;a href=&#34;http://cakephp.hospedaxes.com/crear-pdf&#34;&#62;Crear pdfs en cakephp utilizando TCPDF&#60;/a&#62;&#60;/p&#62;</description>
</item>

</channel>
</rss>

