Hi ha un ServiceProvider per Laravel 5:
https://github.com/xroot/laravel-fpdf
$ sudo apt-get install php-fpdf
La carpeta més important és:
/usr/share/php/fpdf
Fixeu-vos que tot el codi inclòs a la carpeta:
/usr/share/php
és la carpeta per defecte dels includes (es configura a /etc/php5/apache2/php.ini).
El codi principal es troba al fitxer:
/usr/share/php/fpdf/fpdf.php
I per tant per utilitzar FPDF només cal fer el següent include:
require('fpdf/fpdf.php');
Els fitxers instal·lats són:
$ dpkg -L php-fpdf /. /usr /usr/share /usr/share/php /usr/share/php/fpdf /usr/share/php/fpdf/fpdf.php /usr/share/php/fpdf/font /usr/share/php/fpdf/font/courier.php /usr/share/php/fpdf/font/helvetica.php /usr/share/php/fpdf/font/helveticab.php /usr/share/php/fpdf/font/helveticabi.php /usr/share/php/fpdf/font/helveticai.php /usr/share/php/fpdf/font/makefont /usr/share/php/fpdf/font/makefont/cp1250.map /usr/share/php/fpdf/font/makefont/cp1251.map /usr/share/php/fpdf/font/makefont/cp1252.map /usr/share/php/fpdf/font/makefont/cp1253.map /usr/share/php/fpdf/font/makefont/cp1254.map /usr/share/php/fpdf/font/makefont/cp1255.map /usr/share/php/fpdf/font/makefont/cp1257.map /usr/share/php/fpdf/font/makefont/cp1258.map /usr/share/php/fpdf/font/makefont/cp874.map /usr/share/php/fpdf/font/makefont/iso-8859-1.map /usr/share/php/fpdf/font/makefont/iso-8859-11.map /usr/share/php/fpdf/font/makefont/iso-8859-15.map /usr/share/php/fpdf/font/makefont/iso-8859-16.map /usr/share/php/fpdf/font/makefont/iso-8859-2.map /usr/share/php/fpdf/font/makefont/iso-8859-4.map /usr/share/php/fpdf/font/makefont/iso-8859-5.map /usr/share/php/fpdf/font/makefont/iso-8859-7.map /usr/share/php/fpdf/font/makefont/iso-8859-9.map /usr/share/php/fpdf/font/makefont/koi8-r.map /usr/share/php/fpdf/font/makefont/koi8-u.map /usr/share/php/fpdf/font/makefont/makefont.php /usr/share/php/fpdf/font/symbol.php /usr/share/php/fpdf/font/times.php /usr/share/php/fpdf/font/timesb.php /usr/share/php/fpdf/font/timesbi.php /usr/share/php/fpdf/font/timesi.php /usr/share/php/fpdf/font/zapfdingbats.php /usr/share/doc /usr/share/doc/php-fpdf /usr/share/doc/php-fpdf/doc /usr/share/doc/php-fpdf/doc/acceptpagebreak.htm /usr/share/doc/php-fpdf/doc/addfont.htm /usr/share/doc/php-fpdf/doc/addlink.htm /usr/share/doc/php-fpdf/doc/addpage.htm /usr/share/doc/php-fpdf/doc/aliasnbpages.htm /usr/share/doc/php-fpdf/doc/cell.htm /usr/share/doc/php-fpdf/doc/close.htm /usr/share/doc/php-fpdf/doc/error.htm /usr/share/doc/php-fpdf/doc/footer.htm /usr/share/doc/php-fpdf/doc/fpdf.htm /usr/share/doc/php-fpdf/doc/getstringwidth.htm /usr/share/doc/php-fpdf/doc/getx.htm /usr/share/doc/php-fpdf/doc/gety.htm /usr/share/doc/php-fpdf/doc/header.htm /usr/share/doc/php-fpdf/doc/image.htm /usr/share/doc/php-fpdf/doc/index.htm /usr/share/doc/php-fpdf/doc/line.htm /usr/share/doc/php-fpdf/doc/link.htm /usr/share/doc/php-fpdf/doc/ln.htm /usr/share/doc/php-fpdf/doc/multicell.htm /usr/share/doc/php-fpdf/doc/output.htm /usr/share/doc/php-fpdf/doc/pageno.htm /usr/share/doc/php-fpdf/doc/rect.htm /usr/share/doc/php-fpdf/doc/setauthor.htm /usr/share/doc/php-fpdf/doc/setautopagebreak.htm /usr/share/doc/php-fpdf/doc/setcompression.htm /usr/share/doc/php-fpdf/doc/setcreator.htm /usr/share/doc/php-fpdf/doc/setdisplaymode.htm /usr/share/doc/php-fpdf/doc/setdrawcolor.htm /usr/share/doc/php-fpdf/doc/setfillcolor.htm /usr/share/doc/php-fpdf/doc/setfont.htm /usr/share/doc/php-fpdf/doc/setfontsize.htm /usr/share/doc/php-fpdf/doc/setkeywords.htm /usr/share/doc/php-fpdf/doc/setleftmargin.htm /usr/share/doc/php-fpdf/doc/setlinewidth.htm /usr/share/doc/php-fpdf/doc/setlink.htm /usr/share/doc/php-fpdf/doc/setmargins.htm /usr/share/doc/php-fpdf/doc/setrightmargin.htm /usr/share/doc/php-fpdf/doc/setsubject.htm /usr/share/doc/php-fpdf/doc/settextcolor.htm /usr/share/doc/php-fpdf/doc/settitle.htm /usr/share/doc/php-fpdf/doc/settopmargin.htm /usr/share/doc/php-fpdf/doc/setx.htm /usr/share/doc/php-fpdf/doc/setxy.htm /usr/share/doc/php-fpdf/doc/sety.htm /usr/share/doc/php-fpdf/doc/text.htm /usr/share/doc/php-fpdf/doc/write.htm /usr/share/doc/php-fpdf/FAQ.htm /usr/share/doc/php-fpdf/fpdf.css /usr/share/doc/php-fpdf/install.txt /usr/share/doc/php-fpdf/tutorial /usr/share/doc/php-fpdf/tutorial/20k_c1.txt /usr/share/doc/php-fpdf/tutorial/20k_c2.txt /usr/share/doc/php-fpdf/tutorial/countries.txt /usr/share/doc/php-fpdf/tutorial/index.htm /usr/share/doc/php-fpdf/tutorial/logo.png /usr/share/doc/php-fpdf/tutorial/logo_pb.png /usr/share/doc/php-fpdf/tutorial/makefont.php /usr/share/doc/php-fpdf/tutorial/tuto1.htm /usr/share/doc/php-fpdf/tutorial/tuto1.php /usr/share/doc/php-fpdf/tutorial/tuto2.htm /usr/share/doc/php-fpdf/tutorial/tuto2.php /usr/share/doc/php-fpdf/tutorial/tuto3.htm /usr/share/doc/php-fpdf/tutorial/tuto3.php /usr/share/doc/php-fpdf/tutorial/tuto4.htm /usr/share/doc/php-fpdf/tutorial/tuto4.php /usr/share/doc/php-fpdf/tutorial/tuto5.htm /usr/share/doc/php-fpdf/tutorial/tuto5.php /usr/share/doc/php-fpdf/tutorial/tuto6.htm /usr/share/doc/php-fpdf/tutorial/tuto6.php /usr/share/doc/php-fpdf/tutorial/tuto7.htm /usr/share/doc/php-fpdf/tutorial/tuto7.php /usr/share/doc/php-fpdf/index.htm /usr/share/doc/php-fpdf/README.Debian /usr/share/doc/php-fpdf/copyright /usr/share/doc/php-fpdf/changelog.gz /usr/share/doc/php-fpdf/changelog.Debian.gz /usr/share/doc/php-fpdf/changelog.html.gz /usr/share/doc-base /usr/share/doc-base/php-fpdf /usr/share/fpdf
La podeu trobar online a:
http://www.fpdf.org/
O també en local a la carpeta:
/usr/share/doc/php-fpdf
Podeu consultar la documentació web a:
$ firefox /usr/share/doc/php-fpdf/index.htm
TODO: Enllaç
Primer que res, per poder provar el codi php hem de tindre instal·lat el Lamp-server:
$ sudo tasksel
Un cop instal·lat, anem a /var/www/ i creem una carpeta per a les proves del FPDF.
A un fitxer de prova, fiquem el següent codi:
<?php #error_reporting(E_ALL); require('fpdf/fpdf.php'); $pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,utf8_decode('¡Hola, Món!')); $pdf->Output(); ?>
IMPORTANT: Si el fitxer fpdf.php l'hem descarregat d'alguna web, l'haurem de copiar al mateix directori on tenim el fitxer de prova i ficar només el nom del fitxer al require. Si, en canvi, em instal·lat el paquet php-fpdf, haurem d'escriure require('fpdf/fpdf.php');
NOTA: L'utf8_decode cal ficar-lo davant de cada text per evitar els caràcters estranys
Abans de provar-lo, confirmem que l'Apache estigui en funcionament:
$ sudo /etc/init.d/apache2 restart
Ara ja podem anar al navegador i escriure la següent URL:
http://localhost/fpdf/nom_del_fitxer.php
Un cop fets els tutorials fins al que necessitava jo per al crèdit, comencem amb les etiquetes de l'aplicació d'inventari. Aquí vaig tindre el problema amb l'ordre Cell(), ja que no aconseguia col·locar on volia el que volia imprimir. Va ser llavors quan vaig aprendre a utilitzar les ordres Text(), que em permet indicar les coordenades exactes del text a imprimir, i SetXY(), amb la que es pot definir les coordenades per a l'ordre següent. Al cap de uns quants dies de probes vaig aconseguir una etiqueta amb el format que es demanava. Seguint aquesta imatge:
Vaig aconseguir crear el pdf amb la meva etiqueta:
Amb això acabat, vaig introduir el codi necessari per crear tantes con es vulgui de manera dinàmica i amb orientació a objectes (que, al no haver-ho fet mai, vaig tardar bastant en entendre-ho). Aquest és el resultat:
I aquest el fitxer amb la classe i els atributs dels objectes:
Un cop vaig acabar les etiquetes, vaig començar amb el informe de l'aplicació d'inventari. Aquest ja va ser més lleuger, ja que amb les etiquetes havia practicat el suficient per fer-lo sense consultar gaires comandes. El informe inicial que tenia que seguir era així:
I aquest, el que jo vaig crear:
Cal remarcar que va ser amb els informes amb els que vaig practicar la programació orientada a objectes i que, un cop ho vaig entendre, ho vaig adaptar al fitxer d'etiquetes. Al ser els dos pdf per a la mateixa aplicació, els atributs dels objectes eren els mateixos i, per tant, compartien el fitxer inventory.inc
L'horari ja forma part de la meva aportació a l'aplicació de Webfaltes. L'edició del format va ser simple després de haver fet les etiquetes i els informes, però quan Sergi Tur me va demanar que l'usuari pogués triar el nombre de dies que ha de tindre l'horari van començar els problemes. Les cel·les que formen la taula del horari les vaig fer en un primer moment amb un for simple i l'ordre Cell(), ja que em permet triar la mida de la cel·la i pintar els bordes. Però, al tindre que fer un horari amb dies dinàmics, vaig optar per fer les cel·les amb la comanda Line(), que em crea línies d'una coordenada marcada fins un altra; així només tenia que reduir la coordenada final per eliminar l'ultim dia i fer un horari que anés, per exemple, de dilluns a dijous. Aquesta part va ser fàcil, però per parametritzar al màxim, vaig crear 7 constants amb els noms dels dies (Dilluns, Dimarts, ...) i 7 constants amb les coordenades exactes per col·locar el nom del dia al centre de la cel·la. Aquestes ultimes constants són molt importants, ja que, com cada nom té una mida diferent i les cel·les tenen totes la mateixa mida, si augmentava les coordenades sumant-li un valor fixe, el nom quedava descentrat.
El horari que vaig utilitzar com a exemple era semblant a aquest:
I jo vaig crear aquest:
Aquest és el fitxer d'atributs:
Fico un parell d'exemples de l'horari de dies dinàmics.
--Erosbaixauli 15:50, 15 juny 2011 (UTC)
Suport per modificar PDF ja existents:
Problema de les pàgines en blanc, apareix a la web de FPDF (FAQ)
Convertir HTML:
Cal buscar algun lloc on s'inclogui per segon cop FPDF. Es pot utilitzar els include_once.
Vegeu també gosa-highshoolusers
Si us dona el missatge:
Deprecated: Function set_magic_quotes_runtime() is deprecated in /usr/share/php/fpdf/fpdf.php on line 1163 Deprecated: Function set_magic_quotes_runtime() is deprecated in /usr/share/php/fpdf/fpdf.php on line 1201 FPDF error: Some data has already been output to browser, can't send PDF file
NOTA: Una possible solució és desactivar el error_reporting de PHP o al menys no reportar els error de funcions deprecades.
IMPORTANT: La versió 1.6 de FPDF té solucionat aquest problema. --acacha 19:02, 17 juny 2011 (UTC)} .file:///home/sergi/.cache/.fr-Ed3QEc/fpdf17/changelog.htm:
v1.6 (2008-08-03) ... Removed some warning messages appearing with recent PHP versions.
La versió 1.53:
$ dpkg -l | grep fpdf ii php-fpdf 2:1.53.dfsg-6.1 PHP class to generate PDF files
és incompatible amb les versions de PHP 5.3 o superiors.
Aquesta versió és la instal·lada a Ubuntu 10.10:
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 10.10 Release: 10.10 Codename: maverick
IMPORTANT: A partir de la versió Ubuntu 11.04 la versió ja és superior a 1.6... http://packages.ubuntu.com/natty/php-fpdf
Una possibilitat és instal·lar a mà FPDF o també es pot aplicar el següent pegat. Canviar les línies del fitxer /usr/share/php/fpdf/fpdf.php:
set_magic_quotes_runtime(0);
Per:
if(get_magic_quotes_runtime()) @set_magic_quotes_runtime(0);
Recursos:
Al escriure un text amb accents, "ç" i altres caràcters semblants; ens apareixen caràcters estranys com aquests:
$pdf->Text(23,27,'Descripció:'); Descripció
Per evitar-ho, hem d'incloure un codi abans del text:
$pdf->Text(23,27,utf8_decode('Descripció:')); Descripió
Suport Unicode
La comanda per imprimir text més utilitzada es el Cell() però amb aquesta és complicat tria el lloc d'impresió. Per triar el lloc exacte, utilitzarem el Text(); al qual només cal indicar-li les coordenades i el text:
$pdf->Text(8,10,utf8_decode('Hola món'));
Si el que volem és utilitzar una de les opcions específiques del Cell(), com els bordes, haurem d'utilitzar la comanda SetXY() per indicar la posició:
$pdf->SetXY(8,10); $pdf->Cell(30,20,utf_decode('Hola món'),1);
En codi php, per mostrar la data actual només cal utilitzar la comanda date():
echo date('M Y') May 2011
Però si volem la data en català em d'utilitzar dos comandes diferents: setlocale() i strftime().
La primera ens permet modificar el idioma del php i la segona, ens agafa el valor de la data actual. Per mostrar la data d'abans en català farem així:
setlocale(LC_ALL, 'ca_ES.utf8'); $data=strftime("%B %Y"); setlocale(LC_ALL, 'C'); echo utf8_decode(ucfirst($data));
Maig 2011
Tot i que no hi han caràcters extranys, cal utilitzar el utf8_decode per poder-la mostrar. La comanda ucfirst() ens fica la primera lletra en majúscula, ja que el strftime() la retorna en minúscula.
IMPORTANT: Cal torna el idioma al per defecte immediatament després d'emmagatzemar la data en l'idioma que volem; si no, no funcionarà
Al carregar alguna imatge que té activat el canal alfa, com les .png, segurament ens donarà el següent error:
FPDF error: Alpha channel not supported
Per a poder mostrar la imatge hi ha que desactivar aquest canal amb la comanda convert del paquet imagemagick.
Fem un exemple:
$ file 201011-406.png 201011-406.png: PNG image, 147 x 186, 8-bit/color RGBA, non-interlaced
$ sudo apt-get install imagemagick
$ sudo convert 201011-406.png -background white -flatten +matte 201011-406_noalfa.png
$ file 201011-406_noalfa.png 201011-406.png: PNG image, 147 x 186, 8-bit/color RGB, non-interlaced
Per més informació, consulteu el apartat de Imagemagick
--Erosbaixauli 15:50, 15 juny 2011 (UTC)
Consulteu: highschoolusers.
Vegeu fpdf-codeigniter