PHP (56) - Tisk a PDF
Podívejme se, jak lze pomocí PHP realizovat tisk informací z webových stránek a jejich export do PDF!
15.10.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 65760×
Jestliže používáte PHP pro tvorbu opravdu pokročilých aplikací,
dříve či později narazíte na problém tvorby nějakých solidních
tiskových
výstupů. Většinou totiž nestačí data prezentovat na webové stránce, ale
bývá potřeba zajistit, aby si je uživatel mohl vytisknout. Dnes si
ukážeme na několik způsobů, jak tento problém řešit.
Dejme tomu, že budeme potřebovat vytisknout seznam všech pražských
PSČ (narážím na tento poněkud nereálný příklad proto, že máme k
dispozici databázi s PSČ). Ukažme si, jak na to s pomocí PHP můžeme jít
dvěma
různými způsoby.
HTML stránka optimalizovaná pro tisk
Tuto možnost nabízí mnoho webů. Není to nic magického; informace se
postě zformátují tak, aby se daly snadno vytisnkout a zobrazí se. Při
tvorbě stránky pro tištění byste měli mít na paměti tyto zásady:
- Co nejméně druhů písma - třeba i jen jeden
- Co nejméně grafiky - nejlépe žádná, ještě tak nějaké to
jednoduché logo
- Co nejméně barev - měla by stačit černá a bílá.
Kdybychom uvedené zásady použili pro náš příklad, mohli bychom
napsat něco jako:
<?
// zde je include souboru s
konstantami
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DBNAME);
$vysledek=mysql_query("select * from psc where
obec like '%Praha%'");
echo "<TABLE border=\"1\"
style=\"border-collapse: collapse;\">";
while ($zaznam=MySQL_Fetch_Array($vysledek)):
echo "<TR>";
echo "<TD>".$zaznam["obec"]."</TD>";
echo "<TD>".$zaznam["psc"]."</TD>";
echo "</TR>";
endwhile;
echo "</TABLE>";
?>
Spustit skript
To s sebou přináší pochopitelně mnoho problémů. Především, musíme se
spoléhat na tiskové schopnosti našeho prohlížeče, a ty nejsou vždy
dostačující. A také nejsou ve všech prohlížečích srovnatelné. Je třeba
dosti velký problém nastavit okraje stránky tak, aby sestava vypadala
ucházejícím způsobem (i když se spokojíme s testováním jen na několika
nejběžnějších prohlížečích). Je jasné, že pro kvalitní výstupy se
budeme muset
porozhlédnout po něčem jiném.
PHP a PDF
Naprosto ideální je pro tiskové výstupy z PHP použít legendární
formát PDF. U PDF
totiž můžete lehce nastavit takové "drobnosti" jako písmo, znakovou
sadu, orientaci
stránky a její velikost, okraje a tak dále. Navíc máte jistotu, že
sestava bude vypadat na všech systémech stejně, a to je k nezaplacení.
Poměrně propracovaný projekt, zabývající se přímou tvorbou souborů PDF
pomocí PHP je FPDF.
Pokud byste chtěli knihovnu FPDF ve svých skriptech použít, asi Vám
nezbude nic jiného, než si trochu projít dokumentaci. Naznačím ale, jak
by se výše
uvedený příklad převedl do situace, v níž budeme výstup exportovat do
PDF. Vložený soubor fpdf.php obsahuje definici třídy, sloužící pro
tvorbu pdf.
<?
require('fpdf.php');
// zde je include souboru s
konstantami
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DBNAME);
$pdf=new FPDF();
$pdf->AddFont('Arial','','arial.php');
$pdf->AddPage();
$pdf->SetFont('Arial','');
$vysledek=mysql_query("select * from psc where
obec like '%Praha%'");
while ($zaznam=MySQL_Fetch_Array($vysledek)):
$pdf->Cell(120,8, iconv("UTF-8", "ISO-8859-2", $zaznam["obec"]),1);
$pdf->Cell(20,8, iconv("UTF-8", "ISO-8859-2", $zaznam["psc"]),1,1,'R');
endwhile;
$pdf->Output();
?>
Spustit skript
Vypadá to jednoduše a skutečně to jednoduché je. Klíčovou funkcí je
funkce Cell, popaná podrobně v manuálu. Její funkce
je zjednodušeně řečeno taková, že umístí text na předem daný "čtverec"
ve výsledném dokumentu PDF. Funkce AddFont vloží písmo do PDF
dokumentu, takže máme jistotu, že na všech systémech se dokument objeví
stejně.
Pokud budete chtít mít v PDF správně češtinu (jako že asi chtít
budete), může se Vám celý export změnit v peklo na zemi. Následující
postřehy by Vás měly ušetřit nejhoršího:
- Je potřeba použít české fonty. Jejich tvorbu a vložení do
výsledného PDF souboru popisuje manuál k FPDF.
Vřele doporučuji nejprve to celé přečíst, pak pochopit a nakonec udělat
(ne obráceně ;-)))
- FPDF nepodporuje UTF-8. Z toho vyplývá, že české fonty musejí být
v ISO-8859-2 (nebo v cp 1250, ale proč???). Existuje sice klon projektu FPDF, který by
měl toto omezení odstraňovat, ale nefungoval mi.
- Jestliže použijete znakovou sadu ISO-8859-2, musíte vkládat
řetězce v ISO-8859-2!!! Jelikož máme databázi PSČ uloženou v UTF-8,
příklad výše používá funkci iconv
k zajištění správného překódování.
Knihovna FPDF toho umí samozřejmě víc. Text můžete zarovnávat, sázet
ve sloupcích, otáčet a tak dále. Na stránce projektu je rovněž mnoho
příkladů. Domnívám se, že tento styl uvažování (PHP->PDF) má ve
světě otevřených formátů svoji budoucnost a že tiskových exportů tohoto
typu bude přibývat. Takže, vzhůru do studia...
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|