Jak vytvářet dokumenty pro Word v aplikacích psaných v PHP? Na internetu najdete mnoho řešení a služeb, které vám toto umožňují. Někdy jde o knihovny, které jen začleníte do svých existujících projektů, jindy o řešení postavené na některém frameworku (třeba pro Zend), jindy zase o služby běžící někde na jiném serveru a jsou přístupné pomocí nějakého API.
Z mého pohledu nejsnazším způsobem, jak dokumenty Wordu z PHP vytvářet, je použití nějaké knihovny začleněné do projektu. Přesně tak můžete pracovat s knihovnou PHPWord. Stačí si ji nakopírovat do svého projektu, připojit jeden soubor a hned můžete začít vytvářet nebo upravovat dokumenty.
Co všechno PHPWord dovede?
Je asi vhodné upozornit, že PHPWord pracuje s dokumenty Open XML, tedy se soubory s příponou DOCX. Nikoli se starým binárním DOC. Open XML je tu s námi již řadu let, používat jej lze v Microsoft Office od verze 2003, takže není třeba se tohoto formátu bát.
Soubory DOCX, stejně jako další ve formátu Open XML jsou vlastně balíčky ZIP, které obsahují popis dokumentu ve formátu XML. Klidně se podívejte, stačí soubor přejmenovat na příponu ZIP a rozbalit.
Knihovna PHPWord dovede vkládat a formátovat text v dokumentech, pracovat se zalamováním, doplňovat do dokumentu obrázky včetně vodoznaků, nastavovat hlavičku a patičku dokumentu, vkládat tabulky, seznamy a odkazy a také vyvářet obsah dokumentu. Zvládá tedy vše, co obvykle s dokumentem děláte přímo ve Wordu.
Navíc je k dispozici šablonovací systém. Do objektu PHPWordu ve svém skriptu načtete již existující soubor a necháte v něm nahradit připravené značky za vlastní hodnoty. Tím se otevírají nové možnosti využití této knihovny, například pro vytváření dokumentů na základě nějakých údajů vyplněných ve webovém formuláři.
Jak používat PHPWord a vytvořit soubor DOCX v PHP
Ve staženém balíčku najdete konkrétní ukázky použití ve složce Examples. Podívejme se na jednoduchou ukázku práce s textem v nově vytvořeném dokumentu.
Jako první je třeba do stávajícího skriptu napojit soubor PHPWord.php, který najdete v rozbaleném balíčku knihovny PHPWord. Následně vytvoříte nový objekt reprezentující dokument ve Wordu. Poté je potřeba do dokumentu přidat sekci a už můžete začít vkládat jeho obsah.
Pro uložení dokumentu do souboru jsou potřeba dva příkazy. První, s trochu složitějším zápisem, vytvoří objekt zapisovače, kterému předáváte jako jeden z parametrů objekt naplněný daty. Druhý příkaz pak tato data zapíše do souboru se zvolenou cestou a názvem.
<?php require_once '../PHPWord.php'; // Vytvoření nového dokumentu $PHPWord = new PHPWord(); // Vytvoření nové sekce $section = $PHPWord->createSection(); // Přidání textových polí $section->addText('Ahoj světe!'); $section->addTextBreak(2); // Uložení souboru $objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); $objWriter->save('Text.docx'); ?>
PHPWord a šablony
Také pro práci se šablonami najdete ve staženém balíčku příklad, stejně jako pro pokročilejší práci s obsahem a formátováním. Co se šablon týče, základní použití je velice jednoduché:
<?php require_once '../PHPWord.php'; $PHPWord = new PHPWord(); $document = $PHPWord->loadTemplate('sablona.docx'); $document->setValue('jmeno', 'Jan'); $document->setValue('prijmeni', 'Polzer'); $document->save('vysledek.docx'); ?>
Tedy opět připojíte soubor PHPWord.php a vytvoříte nový objekt. Do něj ale napojíte existující soubor DOCX načtený jako šablonu (neplést se šablonami z Wordu jako takového). PHPWord vyhledává v takto napojeném dokumentu řetězce ve tvaru ${hodnota}, u kterých pomocí volání setValue() nahrazuje původní vzorek v šabloně za vámi definovaný text.
V příkladu, který mám uveden výše, tedy dojde k nahrazení výrazu ${jmeno} za slovo Jan a výrazu ${prijmeni} za slovo Polzer. Po nahrazení všech požadovaných řetězců pak dokument jen uložíte.
Problém je v tom, že v řadě případů je ve zdrojovém XML nahrazovací vzorek olepen mnoha značkami a není tam čistě jako řetězec ${hodnota}, který PHPWord očekává. Abyste se vyhnuli problémům, vyhledejte si v balíčku PHPWordu soubor PHPWord/Template.php a funkci setValue() upravte do podoby uvedené v tomto příspěvku. Poté vše funguje bez problémů.
Kde stahovat PHPWord
Knihovnu PHPWord si můžete stáhnout z webových stránek phpword.codeplex.com. Tamtéž najdete i sesterské knihovny PHPPowerPoint a PHPExcel, o které jsem psal v článku Jak vytvořit excelové sešity pomocí PHP.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Tak už jsem na to přišel, stačilo v souboru Section.php nahradit ve funkci addText řádek
$givenText = utf8_encode($text);
za
$givenText = ($text);
Podařilo se Vám prosím rozchodit české znaky? Vše mi funguje právě až na češtinu.
Děkuji