MyEgo.cz - Radek Hulán webzine

MyEgo.cz

home foto blogy mywindows.cz kontakt

PHP skript na automatické generování PDF souborů

PHP 01.05.2004
adobe acrobat

Looging for English version of this article?

Na http://www.fpdf.org/ je dostupná třída pro generování PDF souborů v PHP. Nicméně, jedná se o dost "syrový" produkt. Není možné jen tak jednoduše vzít XHTML soubor, poslat jej do toho, a vytvořit PDF.

Z tohoto důvodu jsem k této 40kB třídě vytvořil další 2 třídy (cca 15kB), které umožňují generovat PDF z XHTML komfortně, za pomocí 2 řádků v PHP!

Příklad:

Základem je třída createPDF. Její použití je nejjednodušší ilustrovat na příkladu:

$pdf =& new createPDF(
 $_POST['html'], // html text to publish
 $_POST['title'], // article title
 $_POST['url'], // article URL
 $_POST['author'], // author name
 time() );
$pdf->http='http://localhost/html2pdf/';
$pdf->directory='/www/html2pdf/';
$pdf->delete=10;
$pdf->useiconv=false;
$pdf->run();

Chcete si vyzkoušet převést text do PDF online?

Další možné způsoby použití této třídy, a její parametry, naleznete přímo v dobře komentovaném zdrojovém souboru html2pdf.php, nemá smysl je zde opisovat.

V souboru index.php naleznete jednoduché použití této třídy, uvedený příklad převede text vložený do uživatelem (do pole textarea), na PDF.

Zvláště upozorňuji na nutnost nastavení proměnných http a directory, udávají URI a lokální cestu, kde se bude vytvářet dočasný soubor (problém s tím měl Petr Weida, About, díky za upozornění). Rovněž, podporovány nejsou GIF soubory (licenční problémy, PHP třída pro PDF je nepodporuje).

$pdf->http='http://localhost/html2pdf/';
$pdf->directory='/www/html2pdf/';

Export your article to Adobe Acrobat PDF (via PHP script)!

Webdesign, CMS 30.04.2004
adobe

I’ve created a new plugin which allows a current article to be automatically exported into Adobe Acrobat PDF file format. This plugin is based on FPDF PHP class, from www.fpdf.org.

Main Features

The plugin can do the following:

  • display bold, italics, underline text.
  • display red and blue text.
  • understands and converts NP_FancyText plugin pseudo-text.
  • removes tags specific to NP_Poll plugin.
  • displays h1, h2, h3, h4 tags with appropriate font sizes and colors.
  • displays lists <li> with a proper list-style.
  • displays XHTML links as Adobe Acrobat links.
  • can embed pictures / images and/or link them!
  • displayes blockquote tags.
  • displayes <pre> and <code> tags with Courier font.
  • displays other text with Times New Roman font.
  • allows not to embed fonts into a PDF file, thus making them efficient, and very small.
  • displays ™, € and © characters.
  • supports iconv character conversions, if necessary.
  • creates a filename like this-is-a-title.pdf.
  • features automatic temporary files deletion after 60 minutes.
  • displays article name and URI in page header.
  • displays page number, and total number of pages in page footer.
  • creates a :banner: page with article name, article URI (hotlink), author name, creation date, and site URI.
  • allows to specify directory for creating temporary files (by default MEDIA_DIR/rsscache/). You have to issue chmod 777 command to this directory.

Rozšíření EU - zítra budu slavit!

Technologie 30.04.2004
EU

Prvního května se většina východní a západní Evropy dočká dlouho očekávaného členství v EU. K Evropské unii se připojuje 10 nových zemí – Česká republika, Estonsko, Kypr, Lotyšsko, Litva, Maďarsko, Malta, Polsko, Slovenská republika a Slovinsko.

Někteří lidé budou nadávat na "zdražení" (nejen SW), které ovšem není zapříčiněno Evroskou unií samotnou, ale naší socialistickou vládou a parlamentem. Vládou, která tuto zemi nehorázně zadlužila. Vládou, která se nám bude smát, se svými nadmutými konty.

Přestože se EU chová v řadě případů také jako místní socialistický moloch, mám z členství v EU radost. Je to cesta k volnému (relativně) trhu, konkurenci, a, hlavně, pohybu pracovních sil (zatím ovšem pro občany ČR ne až zcela volnému...).

Mimochodem, uvažujete o práci v Evropské unii? A pokud ano, uveďte prosím do komentářů v jakém oboru a časovém horizontu :)

Dnes je zavirovaný den!

Technologie 29.04.2004

Dnes je zavirovaný den. Potom, co mi přišlo emailem alespoň 5 fantastických "screensaverů", mi přišel další, docela zábavný email, no, přečtěte si to sami:

The original message was ...
from nat-ktk.miramo.cz [195.146.124.16]
----- The following addresses had 
permanent fatal errors -----
<feedback@yoogee.com>
(reason: 554 5.7.1 rejection: found virus SoBig)
----- Transcript of session follows -----
... while talking to mail.avenuemedia.com.:
>>> DATA
<<< 
554 5.7.1 rejection: found virus SoBig
554 5.0.0 Service unavailable

Podle toho to vypadá, že jsem jakoby posílal email, který měl v sobě virus. Jasně že ne. Jak nat-ktk.miramo.cz, tak feedback@yoogee.com je pochopitelně adresa vytažená z logů člověka, co skutečně vir má.

Pointa? V příloze je soubor s názvem details.com ;) Zřejmě bych jej měl spustit, ne? Abych se dozvěděl, v čem mám problém! Jako další milióny chytrých lidí, co to udělali přede mnou...

MX700 - hlodavec v domě po pár dnech

Technologie 28.04.2004
mx700

Před pár dny jsem psal o koupi nové bezdrátové (RF) myšky, Logitech MX™700. Po pár dnech s ní mám jen pozitivní zkušenosti. Nahradila optickou, kabelovou, myš Microsoftí. Velice úspěšně.

Takže, druhé dojmy z hlodavce:

  • Oproti myši s kabelem se mi, zprvu, zdála MX™700 těžká. Za 24 hodin jsem si zvyknul, nastavil si vyšší akceleraci a rychlost pohybu (Control Panel Windows), a zjistil, že je možno extrémně přesně kontrolovat pohyby kurzoru po obrazovce, i když pohnu myší jen o pár milimetrů.
  • Výdrž akumulátorků je skvělá. I po 3 dnech prakticky nepřetržité práce bez nabíjení je myška svěží. Na stole leží, zatím nevyužitý, stojánek, s nabíječkou. Myš do něj stačí velice jednoduše položit, a nabíjí se.
  • Včera jsem dělal celou noc na jedné dost složité retuši ve Photoshopu. Pro kamaráda. Amputoval jsem Harapesovi hlavu a ruku, doplnil je z jiné fotky, vyhladil vrásky, doplnil stíny pod rukou, odlesky manžet, stíny od kravaty, a řadu dalších věcí, na souboru o velikosti 80MB. Přesnost této myšky je dokonalá. Pokročilé retuše ve Photoshopu jsem vždy nenáviděl. Nicméně, přesnost a snadnost používání MX™700 je excelentní!
  • Oblíbil jsem si, kromě kolečka, na rolování, rovněž 2 tlačítka na skok o celou stránku zpět / dále. Dobré je i tlačítko na přepínání aplikací.
  • Reakce na pohyby myši je okamžitá. Lepší, subjektivně, (jak je to možné??) než u kabelu.
  • Absence kabelu je skvělá. Právě u té práce ve Photoshopu se to dobře pozná. Kabel tam občas velice vadí, překáží, kvůli kabelu uhnete často o jeden pixel, či více, a... ono je to poznat. S touto myší ne! Je přesná. Logitech MX engine a RF bezdrát je skvělý.

Nějaké negativa?

  • Ne :)

Regulární výrazy v PHP - online

Technologie 27.04.2004

Na bitesizeinc.net je dostupný, dost užitečný, online checker regulárních výrazů v PHP, včetně cca 30 nejčastějších výrazů před-definovaných.

Jak to funguje? Do levého okna napíšete text, do pravého regexp, stisknete Test a... zobrazí se Vám, která část textu je regexpem vybrána. Dost užitečné!

Gmail má v Evropě problémy

Google 27.04.2004
GMail

Před pár týdny se hlupáci z evropské komise rozhodli ukrást 500 miliónů € Microsoftu. Nyní se evropská Privacy International chystá na Google a jeho Gmail. Připomíná mi to opět hon na čarodejnice.

O co Privacy International jde?

Nelíbí se jim, dle oficiálního vyjádření, to, že Google bude skenovat Vaše emaily, a na základě toho, Vám nabízet reklamu. Formou textových AdWords. Také se jim prý nelíbí, že Google bude uchovávat i uživatelem smazané emaily.

O co ale skutečně jde?

Nabídnout zdarma 1GB prostoru pro email, s pokročilými vyhledávacími službami, znamená velice nepříjemně konkurovat lokálním, evropským, portálům, a mizerným emailovým službám s kapacitou schránky 1000x menší. Navíc, pokud uživatel GMailu souhlasí s licenčními podmínkami, tedy, že jeho emaily budou nějakým automatem skenovány, a na tyto podmínky dobrovolně přistoupí, není důvod, aby jakási evropská organizace, zakazovala takovéto podnikání. Proč potom nezakáže různé SpyWare a AdWare, které se instalují s každým druhým softwarem?

To, že program Google bude skenovat Váš email, není problematické. Vaše emaily stejně skenuje FBI, BIS, či řada dalších organizací. Váš email si bez problémů přečte Váš poskytovatel SMTP serveru a POP3 serveru.

Co mi zde ale mimořádně vadí, je rozdílný přístup evropských pitomců k úspěšným, velkým firmám, a k těm ostatním. Ty špatné firmy dostávají subvence (které se berou od firem úspěšných). Také Vám to připomíná komunismus?

Internet je jedna velká, zprůměrovaná, vesnice!

Technologie 25.04.2004
NYC

Jsem městský člověk. Tedy, velkoměstský člověk. Jako ryba ve vodě se cítím v 15-ti miliónovém New Yorku, 20-ti miliónovém Bangkoku nebo Mexico City. Miliónová Praha se ještě dá snést. Chvíli. V Brně bych umřel. Hned.

Proč? Nemám rád vesnice. V typické vesnici člověk musí dělat řadu ústupků. Dělat si, co on chce, může jen pod "kontrolou", tedy, aniž by řada babiček postávajících kolem, či puberťáků pobíhajících kolem, jeho konání nejapně a nechápavě nekomentovala a nehodnotila.

Lidé vesničtí se zajímají o to, co dělají ostatní, znají jen jednu "pravdu", zprůměrovanou pravdu, a komentují, a hodnotí. Nechápu tuto zálibu. Jsou to lidé, co nemají co na práci, nebo nemají dostatek intelektu na to, aby se zajímali sami o sebe (o své vzdělání, práci, zábavu, požitek), a tak ztrácí svůj čas tím, že... hodnotí ostatní.

Patrick Zandl, marigold.cz a Opera

Technologie 23.04.2004
WiFi

Patrick Zandl, marigold.cz, si na základě mého článku o Opeře tuto stáhnul, pár minut ji používal, zjistil, že marigold.cz je tam totálně rozhozen, tak ji zase smazal. Uhuh.

Marigold.cz je totálně nevalidní web, ale o to zde nejde! Tento problém není, typicky, Operní, ale spíše chybějící, či přebývající, DIV.

Tak jsem se na celou věc podíval a... je to tak. :)

Toto je starý kód:

....
</FORM>
</div> <!-- tady tento div smazeme -->
<form action="/zpracuj_hlasovani.php3" method="post">
....
<a href="#" onclick="window.open('/hlasovani_vysledky.html','Hlasovani','width=400,
 height=500'); return  false;"> zobrazit výsledky</a>
</form>
</p>
</div> 
.... 

A toto je upravený kód:

.... 
</FORM>
<form action="/zpracuj_hlasovani.php3" method="post">
.... 
<a href="#" onclick="window.open('/hlasovani_vysledky.html','Hlasovani','width=400,
 height=500'); return  false;">  zobrazit výsledky</a>
</p> <!-- tady presuneme p do formu, predtim bylo za nim -->
</div> <!-- tady jeden novy div pridame -->
</form>
</div> 
.... 

To je celé! Není to problém Opery, ale, pokud uzavřu "obsah" webu dříve než má skončit, tak, Opera jej skutečně uzavře. IE si myslí, vzhledem k tomu, že ještě něco následuje, že raději tento uzavírací DIV bude ignorovat, protože to tam asi někdo, jen tak, zapomněl. Hm. Nemám rád browsery, co si vymýšlejí. Ono to je chvíli dobře, ale, co když Patrick zítra napíše nějaký článek, a už to bude pro IE špatně?

Na marigold.cz chodí dost podstatná část lidí s ne-IE browsery (tedy, možná ne, kvůli "vylučovacímu efektu", o kterém moc pěkně psal Yuhů).

Co z toho tedy plyne? Validita sama o sobě nemá smysl (pro praktické použití webu). Validní není ani google.com, ani amazon.com, ani yahoo.com. Nicméně, jak jsem o tom psal před pár dny, je to takový dobrý debugger pro web-designéra, aby on odhalil svoje chyby. Ono, pokud děláte validní web, a něco Vám nefunguje jak má, tak to v 5 chybách snadno najdete. V 300 chybách už to je dost obtížné... A jinak než validátorem se k chybě budete propracovávat hodně těžko.

Jak automaticky na SEO permalinky (URI) článků?

Technologie 22.04.2004

Víťa Marabu se měl ptal po ICQ, jak na SEO odkazy. Nucleus CMS má plně automatické generování SEO odkazů článků, a starají se o to 2 jednoduché funkce.

Konkrétní postup:

function iso2ascii($s){
 $iso="áčďéěíĺľňóřšťúůýžäëöüÁČĎÉĚÍĹĽŇÓŘŠŤÚŮÝŽÄËÖÜ";
 $asc="acdeeillnorstuuyzaeouACDEEILLNORSTUUYZAEOU";
 return strtr($s,$iso,$asc); }
function _makefancyTitle($title) {
 $title = strtolower(iso2ascii(strip_tags(trim($title))));
 preg_match_all('/[a-zA-Z0-9]+/', $title, $nt);
 return strtolower(implode('-', $nt[0]));
}

PS: Víťa potřeboval konverzi i azbuky, není problém si funkci iso2ascii() uzpůsobit a doplnit i o azbuku ;)