Implementace mudulů pro generování PDF výstupů do systému Mediawiki

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

K vygenerování PDF výstupů z publikačního systému MediaWiki potřebujeme rozšiřující knihovny Extension:Collection a Extension:PDF Writer, které jsou chráněny autorskými právy PediaPress a jsou distribuovány pod licencí GNU/GPL. Extension:Collection přidává MediaWiki kromě nové funkce tisk a export možnost ukládat články a vytvářet z nich kolekce. Pomocí rozšíření PDF:Writer dokážeme generovat PDF výstupy z jednotlivých článků nebo sbírek.

Implementace a konfigurace modulu Extension:Collection

Pro implementaci rozšiřující knihovny Extension:Collection do MediaWiki musíme nainstalovat speciální balíček php-curl. Tento balíček nainstalujeme zapsáním příkazu do terminálu:

sudo apt-get install php5-curl

Po instalaci je potřeba restartovat web server příkazem:

sudo /etc/init.d/apache2 restart

Následně je potřeba rozbalit stažený balíček s tímto rozšířením do složky Extensions, která se nachází v hlavním adresáři MediaWiki. Aby mohl být následující příkaz použit, musíme se nacházet ve složce, kde se zrovna zabalený soubor s rozšířením nachází. Rozbalení souboru pak provedeme pomocí tohoto příkazu:

tar-xzf Collection-MWx.y-z.tar.gz –C /home/janovsky/public_html/MediaWiki/Extensions

K implementaci rozšíření Extension:Collection je nutné přidání tohoto řádku do LocalSettings.php:

require_once("$IP/Extensions/Collection/Collection.php");

Tento řádek se nachází v námi rozbalené složce Extensions/Collection v souboru README.txt.

Do LocalSettings.php vložíme ještě další řádek:

$wgEnableWriteAPI = true;

Tento řádek povoluje provádění zápisových operací, mezi které patří například stránkové úpravy atd. Nyní se můžeme připojit přes náš prohlížeč do naší MediaWiki a všimnout si, že přibyla na levé navigační liště další možnost tisk/export, to znamená, že instalace proběhla úspěšně. Díky tomuto rozšíření lze nyní vytvářet Wikiknihy.


Mediawiki pdf 17.png

Schéma č. 17: Extension:Collection. Zdroj: [48], vlastní zpracování

Pod možností tisk/export je nyní na výběr položka vytvořit knihu, avšak pozor toto rozšíření funguje pouze, pokud je MediaWiki na internetu a online. Pokud je tedy MediaWiki online, lze si nechat vytvořit knihu přes externí online vykreslovací server, který je na webu http://tools.pediapress.com/mw-serve/. Tohle je vhodné obzvlášť pro Wiki stránky s nízkým provozem, které jsou přístupné na internetu a nevyžadují proto instalaci svého vlastního PDF serveru. Vytvoření knihy, tak proběhne přes Pediapress, kde si můžete takto vykreslenou knihu za poplatek nechat vytisknout a zaslat na naši adresu. Druhá položka, která se nachází pod tisk/export, je možnost stáhnout jako PDF. Tato možnost nám dovoluje vybrané články z naší MediaWiki také vygenerovat pomocí externího online vykreslovacího serveru Pediapress, ale už bez možnosti vytisknutí, ale co je hlavní, je nám nabídnuta možnost stažení vygenerovaného PDF souboru do našeho počítače.

Dokud není nainstalovaný vlastní vykreslovací PDF server a adresa pro vykreslování se tedy odkazuje na výchozí server http://tools.pediapress.com/mw-serve/, tak po zvolení kterékoliv ze dvou možností pod tisk/export se vypíše chybové hlášení - bad base_url. Důvodem je, že naše MediaWiki funguje na localhostu a externí server není schopen zpracovat požadavek z adresy, ve které je obsažen localhost.


Mediawiki pdf 18.png

Schéma č. 18: Chybové hlášení vykreslovacího serveru. Zdroj: [48], vlastní zpracování

To je jeden z důvodů, proč potřebujeme nainstalovat vlastní PDF server. Druhým důvodem je, aby bylo možné dokázat tyto generované PDF upravovat už při vykreslování. Proto jsem toto chybové hlášení ignoroval a pokračoval dál instalací konfigurací PDF serveru.

Vlastní PDF server se hodí zejména pro velké a hodně navštěvované Wiki weby. Samozřejmě jeho využití je i právě u Wiki, které nejsou online přístupné z internetu a fungují jenom na soukromých strojích. Jak jsem již zmínil, tak další výhodou u vlastního PDF serveru je, že můžeme pomocí úpravy zdrojových kódů, které slouží pro vytváření PDF, změnit vzhled nebo šablonu celého PDF dokumentu podle různých parametrů.

Implementace a konfigurace vlastního PDF serveru

K instalaci vlastního PDF serveru bude potřeba kromě konfigurace rozšiřujícího modulu Extension:Collection také konfigurace rozšiřujícího modulu Extension:PDF Writer. Vše, co je potřeba udělat, je správně nakonfigurovat tato rozšíření. A aby byla rozšiřující knihovna Extension:Collection nastavená tak, aby adresa k vykreslovacímu serveru byla nastavena na náš PDF server jako na výchozí.

Mwlib.rl je chráněna autorskými právy PediaPress a je šířena pod BSD licencí. Mwlib vyžaduje ke svému fungování, stažení a nainstalování kompilátorů a python. Jako kompilátory vyžaduje C a C++. Mwlib pracuje pouze s python verzemi 2.5, 2.6 a 2.7, vyšší verze nejsou podporovány. Ještě vyžaduje python imaging library, která se nazývá pil a python lxml balíček. A jako poslední samozřejmě UNIX-like operační systém. Instalaci tohoto potřebného softwaru provedeme napsáním příkazu do terminálu Ubuntu. Musíme použít příkaz sudo, abychom měli ten nejvyšší přístup.

sudo apt-get install g++ perl python python-dev python-setuptools python-imaging python-lxml libevent-dev

Tímto si zajistíme potřebné softwarové zázemí pro fungování Mwlib. Nyní můžeme nainstalovat samotnou knihovnu a balíček. To provedeme přes terminál. Knihovnu mwlib nainstalujeme příkazem:

sudo easy_install mwlib

Knihovnu mwlib.rl nainstalujeme příkazem:

sudo easy_install mwlib.rl

Po zadání těchto příkazů se spustí instalace, která se spojí se serverem a zjistí nejaktuálnější verze těchto dvou knihoven a nainstaluje je. Nakonec je ještě potřeba nainstalovat pdftk, což je nástroj sloužící k manipulaci s pdf dokumenty.

sudo apt-get install pdftk


Testování funkčnosti samotného PDF vykreslovacího serveru

Test funkčnosti provedeme zapsáním dvou příkazů do terminálu. Prvním příkazem stáhneme pomocí mw-zip testovací článek z jiného Wiki serveru, než je náš, například z anglické Wikipedie a vybereme z ní článek o plazech.

mw-zip –c :en –o test.zip Lizards

Tímto příkazem si prověříme, zda mw-zip funguje správně. Po dokončení by se měl v naší domovské složce objevit výstup test.zip. Druhým příkazem ověříme funkčnost mw-renderu.

mw-render –c test.zip –o test.pdf –w rl


Pokud mw-render funguje správně, tak by se měl v domovské složce objevit také test.pdf. Tímto testem jsme si ověřili fungování našeho vykreslovacího serveru. Teď nezbývá než zkusit vygenerovat nějaký článek z naší MediaWiki.


Konfigurace PDF vykreslovacího serveru pro generování výstupů z MediaWiki

Abychom mohli generovat výstupy z článků naší MediaWiki musíme propojit náš vykreslovací server s MediaWiki. To znamená, že musíme změnit výchozí adresu serveru z http://tools.pediapress.com/mw-serve/ na adresu našeho PDF serveru. Do terminálu napíšeme příkaz:

ifconfig

tento příkaz vypíše síťová rozhraní a jejich aktuální nastavení IP adres, masky sítě atd. Nás zajímá NAT IP adresa, kterou použijeme k propojení.

Mediawiki pdf 19.png

Schéma č. 19: Zjištění adresy pomocí příkazu ifconfig. Zdroj: [45], vlastní zpracování

Dalším krokem je tuto adresu zapsat do dvou řádků v LocalSettings.php, to provedeme příkazem:

sudo nano /home/janovsky/public_html/MediaWiki/LocalSettings.php

A zde upravíme dva řádky:

 $wgServer="http://zjištěná adresa z ifconfig";
 $wgCollectionMWServeURL="http://zjištěná adresa z ifconfig:port";

Zdrojový kód č. 4: Propojení MediaWiki s vykreslovacím serverem. Zdroj: vlastní

U řádku $wgCollectionMWServeURL musí být adresa zapsána i s portem, který následuje po dvojtečce. Tento řádek je obsažen i přímo ve složce Extensions/Collection v Collection.php, kde je uveden se základním serverem. Tady se však řádek přepisovat nemusí, změny stačí provést v LocalSettings.php.

Změny uložíme a zavřeme terminál. Nyní máme MediaWiki propojenou s PDF vykreslovacím serverem. Teď nezbývá, než spustit vykreslovací server to provedeme zapnutím čtyř terminálů a do každého vložíme jeden z těchto příkazů:

nserve.py &
mw-qserve &
nslave.py --cachedir ~/cache/ &
postman.py &

Po spuštění těchto programů můžeme otestovat funkčnost serveru vygenerováním PDF článku z MediaWiki.

=Testování vykreslování z článků MediaWiki

Test provedeme následovně, do webového prohlížeče nastavíme adresu naší MediaWiki, localhost/~user_name/MediaWiki. Po načtení hlavní obrazovky MediaWiki zvolíme v navigační liště pod možností Tisk/export položku Stáhnout jako PDF. Následně by měl začít vykreslovací proces. Pokud se místo zahájení procesu objeví prázdná, neboli blank web stránka, nastala někde chyba. Důvod, proč nezačalo vykreslování, můžeme zjistit tak, že se podíváme do výpisu chyb. Ten najdeme ve složce Apache2 pomocí cesty var/log/apache2/errors.log a zde najdeme bližší informace o chybě. Pokud se na vykreslovací stránce objeví chybová hláška Chyba vykreslovacího serveru, je pravděpodobně špatně nastavený vykreslovací server, v tom případě musíme pořádně zkontrolovat zapsané adresy v řádku $wgServer a řádku $wgCollectionMWServeURL v LocalSettings.php.


Mediawiki pdf 20.png

Schéma č. 20: Špatně nastavený vykreslovací server. Zdroj: [48], vlastní zpracování

Když je vše nakonfigurováno, měla by se po zvolení možnosti Stáhnout jako PDF zobrazit vykreslovací stránka, která nás informuje o stavu vykreslování. Po dokončení vykreslování nám bude nabídnuta možnost stažení našeho článku z MediaWiki ve formátu PDF.


Mediawiki pdf 21.png

Schéma č. 21: Ukázka průběhu vykreslování. Zdroj: [48], vlastní zpracování

Na tomto schématu vidíme kolik procent je z dokumentu dokončeno a stav vykreslování, které nás přesně informuje, co se právě provádí. Pokud se delší dobu procenta u pole dokončeno neměnní, je potřeba zkusit stránku obnovit. Ale ve většině případů vše probíhá automaticky, a když k něčemu takovému dojde, tak je většinou chybně nastavený vykreslovací server. Rychlost vykreslování jde upravit v konfiguračním souboru. Nyní můžeme zkusit generovat PDF výstupy.


Spuštění PDF serveru pomocí shell skriptu

Pro jednodušší spuštění PDF vykreslovacího serveru si můžeme vytvořit shell skript, který spustí všechny čtyři programy, tvořící vykreslovací server skrze jeden terminál a pomocí jednoho příkazu.

Shell skript může být využit i pro provedení příkazu, který vykreslovací server zapne ihned po spuštění systému a tím odpadá potřeba opakovaného zapínání. Pro psaní shell skriptů máme dvě možnosti, buď psát skript jako sérii příkazů, což je tzv. interaktivní nebo můžeme příkazy zapsat do souboru, tzv. skriptu a potom spustit. Použijeme druhou možnost, zapsání do souboru. Otevřeme si textový editor, do kterého zapíšeme na první řádek tento příkaz:

#!/bin/sh

Následně vložíme čtyři řádky ke spuštění vykreslovacího serveru:

nserve.py &
mw-qserve &
nslave.py --cachedir ~/cache/ &
postman.py &

Na konec souboru vložíme:

exit 0

Uložíme tento soubor například jako render.sh a zkusíme ho spustit příkazem. Do terminálu tedy napíšeme:

$ ./render.sh

Terminál vypíše, že nemáme oprávnění tento soubor spustit, takže musíme upravit práva pro spuštění tohoto souboru. Práva si přidělíme zapsáním tohoto řádku do terminálu:

$ chmod +x render.sh

Nyní máme práva ke spuštění a můžeme znovu použít příkaz:

$ ./render.sh

Teď spustíme všechny čtyři programy tvořící vykreslovací server v jediném terminálu a jediným příkazem. Skript můžeme spustit i bez změny práv, a to tak, že zadáme program, ve kterém má být skript spuštěn a soubor se skriptem mu předáme jako parametr. Takže do terminálu zapíšeme:

$ /bin/bash render.sh