FPDI - využití PDF šablony v opakujícím doplňování textu

08.04.2021 Programování #php #fpdf #programování

Základní příklad na použití knihovny FPDF pro generování PDF souborů, kdy připojíme jeden vzorový PDF soubor a ten klonujeme a následně do každého listu přidáme data např. z databáze.


Knihovna FPDF je velice povedený projekt - http://www.fpdf.org/. Umožňuje zpracovávat PDF v PHP. Disponuje celu řadou možností. Při řešení automatického vyplňování například různých prohlášeních se přímo vybízí tuto knihovnu použít, Stačí si vytvořit PDF soubor který bude představovat vzor, do kterého pak můžeme doplňovat pouze data.

<?php
error_reporting(E_ERROR);

include('../inc/config.inc.php');
include('../inc/ini.php');
include('../inc/class.covid.php');
require_once('../inc/fpdf.php');
require_once('../inc/fpdi/src/autoload.php');

header('Content-Type: text/html; charset=utf-8');

if($_POST['datum']<>"") {

    $forDay=$_POST['datum'];
    $value=queryDBdata("SELECT * FROM ".$cfg['tbl_form']." WHERE datum_book LIKE '{$forDay}%' ORDER BY datum_book ASC");

    if(count($value)>0) {
        $pdf = new setasignFpdiFpdi();
        $pdf->setSourceFile('../data/tpl-email/potvrzeni.pdf');
        $page=1;
        for($i=0;$i<count($value);$i++) {
            $pdf->AddPage('P');
            $pdf->AddFont('Arial', '', 'arial.php');
            $tplIdx = $pdf->importPage(1);
            $pdf->useTemplate($tplIdx, 0, 0);
            $pdf->SetFont('Arial','',12);
            $pdf->SetTextColor(0, 0, 0);
            $pdf->SetXY(65, 88.5);
            $pdf->Write(0, iconv('UTF-8', 'WINDOWS-1250', "{$value[$i]['prijmeni']}"));
            $pdf->SetXY(65, 95);
            $pdf->Write(0, iconv('UTF-8', 'WINDOWS-1250', "{$value[$i]['jmeno']}"));
            $pdf->SetXY(85, 102);
            $pdf->Write(0, $value[$i]['datum_narozeni']);
            $pdf->SetXY(85, 108);
            $pdf->Write(0, iconv('UTF-8', 'WINDOWS-1250', "{$value[$i]['narozeni_mesto']}"));
            $pdf->SetXY(110, 114);
            $pdf->Write(0, $value[$i]['doklad']);
            $pdf->SetXY(40, 144);
            $pdf->Write(0, $value[$i]['datum_book']);
            $pdf->SetXY(40, 205);
            $pdf->Write(0, "MP Biomedicals");
            $pdf->SetXY(40, 225);
            $pdf->SetFont('Arial','',10);
            $pdf->Write(0, iconv('UTF-8', 'WINDOWS-1250', "Č. Budějovicích"));
            $pdf->SetXY(90, 225);
            $pdf->SetFont('Arial','',10);
            $pdf->Write(0, $forDay);
        }
        $pdf->Output();
    }
}

Základní popis metod

setSourceFile - obsahuje parametr v podobě cesty k PDF souboru, který se vkládá jako vzor.

AddPage - nastavení zda se výsledný formát bude Portrait - P nebo Landscape - L.

importPage - zde se uvádí číslo stránky z přikládaného souboru, do kterého se budou dělat úpravy. Takže pokud má soubor pouze jeden list, který se má opakovat na každé stránce (např. při vyplňování sestav různých potvrzení), bude uvedeno číslo 1. Jinak to lze nahradit inkrementem $i.

AddFont - nastavení fontu. Pro  české znaky zde může nastat problém s kódováním, proto v metodě pro výpis řetězce Write je nutná konverze, ale za předpokladu, že font podporuje české znaky. Odpovídající font, lze vytvořit z klasického ttf formátu pomocí nástroje MakeFont.  

Output - zajišťuje výstup výsledného PDF. Pokud bude bez parametrů, tak se zobrazí přímo v prohlížeči. Pokud s použijí parametry, tak lze soubor například uložit na disk. Např. $pdf->Output('F', 'files/prohlaseni.pdf'); F - uložení na disk, cesta pro uložení s názvem souborů.