====== TCPDF su Debian 10 Buster ======
Purtroppo il pacchetto **php-tcpdf** non è presente in **Debian 10 Buster**, esiste però come **[[https://packages.debian.org/buster-backports/all/php-tcpdf/download|backport]]** oppure si dovrebbe poter installare la versione da Debian Bullseye, scarcando il file da [[https://packages.debian.org/bullseye/php-tcpdf|Debian packages]].
mkdir -p /usr/local/download/php-tcpdf
cd /usr/local/download/php-tcpdf
wget http://ftp.de.debian.org/debian/pool/main/t/tcpdf/php-tcpdf_6.3.2+dfsg1-1_all.deb
dpkg -i php-tcpdf_6.3.2+dfsg1-1_all.deb
Una volta installato è sufficiente includere nel codice PHP:
require_once('/usr/share/php/tcpdf/tcpdf.php');
===== L'alternativa FPDF =====
In alternativa a **php-tcpdf** esiste il pacchetto **[[https://packages.debian.org/buster/php-fpdf|php-fpdf]]** (home page [[http://www.fpdf.org/|www.fpdf.org]]). Si tratta di una libreria con minori funzionalità, ma più snella. È inclusa nelle ultime versioni di Debian, compresa l'auttuale stabile **10 Buster** (che include **php-fpdf 1.8.1**), e la futura **Bullseye**.
===== L'estensione FPDI =====
**[[https://packagist.org/packages/setasign/fpdi|FPDI]]** sta per **Free PDF Document Importer**, si tratta di una **estensione** che funziona sia con [[http://www.fpdf.org|FPDF]] che con [[https://github.com/tecnickcom/TCPDF|TCPDF]]. Consente di inlcudere un file PDF esistente ed utilizzarlo come **template** per creare altri documenti.
Debian includeva **libfpdi-php 1.4.1** fino alla versione **8 Jessie**, nella attuale versione 10 Buster purtroppo non c'è. La libreria è comunque scaricabile da **GitHub**, ad esempio la release 2.2.0 è scaricabile scegliendo il **[[https://github.com/Setasign/FPDI/tree/v2.2.0|Tag v2.2.0]]**.
Per una installazione manuale si può scompattare l'archivio **FPDI-2.2.0.zip** in **/usr/local/share/php/** oppure anche nella directory stessa del progetto PHP. Quello che serve è la directory **src** contenuta nell'archivio ZIP, che può essere rinominata ad esempio in **fpdi-2.2.0** creando un link simbolico **fpdi**. Per includerla si aggiunge al codice PHP:
// Set the namespace to use FPDI over FPDF.
use setasign\Fpdi\Fpdi;
// Set the namespace to use FPDI over TCPDF.
// use setasign\Fpdi\Tcpdf\Fpdi;
// Include the FPDI extension, to import pages from existing PDF documents.
require_once('/usr/local/share/php/fpdi/autoload.php');
Come si vede nell'esempio viene utilizzata la keyword **use** per definire quale //variante// di FPDI si vuole utilizzare: quella basata su FPDF oppure quella basata su TCPDF (in effetti sono supportate anche altre varianti).
**ATTENZIONE**: La versione **FPDI 2.2.0** richiede **FPDF 1.8**. Con versioni più vecchie (ad esempio FPDF 1.7) si incappa nell'errore:
PHP Fatal error: Access level to setasign\Fpdi\FpdfTplTrait::_putimages()
must be public (as in class FPDF) in /niccolo/fpdi/FpdfTpl.php on line 19
===== Installazione consigliata =====
Ad oggi (giugno 2024) questo è lo stack di librerie consigiate:
* **TCPDF** dal pacchetto Debian **php-tcpdf** (versione **6.6.2** in Debian 12).
* **FPDI** installata localmente da archivio **FPDI-2.6.0.tgz** (scompattare la directory **src/** e rinominarla in **/usr/local/share/php/fpdi/**).
Nel codice PHP si includono le librerie con le seguenti direttive:
set_include_path(".:/usr/local/share/php:/usr/share/php");
require_once('tcpdf/tcpdf.php');
use setasign\Fpdi\Tcpdf\Fpdi;
require_once('fpdi/autoload.php');
Per creare una pagina PDF con Fpdi:
// TCPDI extends the TCPDF class:
$pdf = new Fpdi($orientation='P', $unit='pt', $format='A4', $unicode=TRUE, $encoding='UTF-8', $diskcache=FALSE);
// Add a page
$pdf->AddPage();
// Include a PNG picture.
$pdf->Image('image.png', 80.0, 110.0, 60.0);
// Include page 7 from an existing PDF document.
$pdf->setSourceFile('document.pdf');
$imported_page = $pdf->importPage(7, '/MediaBox');
// Arguments: ($page, $x, $y, $size):
$pdf->useTemplate($imported_page, 80, 510, 140);
//Close and output PDF document
$pdf->Output('save_as.pdf', 'I');