IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Laravel

Hi ha un ServiceProvider per Laravel 5:

https://github.com/xroot/laravel-fpdf

Instal·lació

$ 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

Documentació

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

Documentació Crèdit de síntesi

TODO: Enllaç
  • Exemple inicial

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
  • Segon tutorial

Segon tutorial

  • Tercer tutorial

Tercer tutorial

  • Quart tutorial

Quart tutorial

  • Cinqué tutorial

Cinqué tutorial

  • Etiquetes

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:

Etiqueta inicial.jpg

Vaig aconseguir crear el pdf amb la meva etiqueta:

Etiqueta creada.jpg

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:

Etiquetes.jpg

Codi de les etiquetes

I aquest el fitxer amb la classe i els atributs dels objectes:

Codi inventory.inc

  • Informe

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í:

Informe inicial.jpg

I aquest, el que jo vaig crear:

Informe creat.jpg

Codi del informe

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

  • Horari

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:

Horari inicial.jpg

I jo vaig crear aquest:

Horari creat.jpg

Codi del horari

Aquest és el fitxer d'atributs:

Codi del timetable.inc

Fico un parell d'exemples de l'horari de dies dinàmics.

  • Horari d'una setmana de 3 dies:

Horari 3dies.jpg

  • Horari d'una setmana de 6 dies:

Horari 6dies.jpg

--Erosbaixauli 15:50, 15 juny 2011 (UTC)

Altres

Suport per modificar PDF ja existents:

Problema de les pàgines en blanc, apareix a la web de FPDF (FAQ)


Convertir HTML:

http://www.htmldoc.org/

TroubleShooting. Resol·lució de problemes

Fatal error: Cannot redeclare class FPDF in /usr/share/php/fpdf/fpdf.php on line 15

Cal buscar algun lloc on s'inclogui per segon cop FPDF. Es pot utilitzar els include_once.

Deprecated: Function set_magic_quotes_runtime() is deprecated in ... FPDF error: Some data has already been output to browser, can't send PDF file

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:

Suport unicode. Accents i altres caràcters

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

Escriure còmodament allà on vulgues

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);

Mostrar una data en php en català

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à

Solució per a canal alfa dels formats de les imatges

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:

  • Podem comprovar que el canal alfa està activat amb la comanda file:
$ file 201011-406.png 
201011-406.png: PNG image, 147 x 186, 8-bit/color RGBA, non-interlaced
  • Llavors, instal·lem el paquet:
$ sudo apt-get install imagemagick
  • Un cop instal·lat, utilitzem la comanda convert per desactivar-lo. Aquesta comanda també serveix per canviar el format i la mida de les imatges.
$ sudo convert 201011-406.png -background white -flatten +matte 201011-406_noalfa.png 
  • Ara ja podem confirmar que ja no apareix el canal alfa:
$ 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)

Exemple d'ús en aplicacions fetes a mida

Webfaltes

highschoolusers

Consulteu: highschoolusers.

Code igniter

Vegeu fpdf-codeigniter

Vegeu també

Enllaços externs

Web oficial del FPDF