Uživatelská dokumentace - FormTools | Software project
Transkript
Form Tools Uživatelská dokumentace Jan Bulánek Zbyněk Falt Lukáš Ježek Jaroslav Keznikl Form Tools: Uživatelská dokumentace Jan Bulánek, Zbyněk Falt, Lukáš Ježek a Jaroslav Keznikl Obsah 1. Úvod ..................................................................................................................................... 1 1.1. Co Form Tools dělají ................................................................................................... 1 1.2. Proces vývoje formuláře .............................................................................................. 1 2. Instalace ................................................................................................................................ 4 2.1. Systémové požadavky ................................................................................................. 4 2.2. MS Windows ............................................................................................................... 4 2.3. Linux a další UNIXové systémy .................................................................................... 5 2.3.1. Potřebné knihovny ............................................................................................ 5 2.3.2. Kompilace a instalace ....................................................................................... 5 3. Návrhář formulářů .................................................................................................................. 7 3.1. Vzhled hlavního okna .................................................................................................. 7 3.2. Tutoriál ........................................................................................................................ 7 3.2.1. Vytvoření formuláře ........................................................................................... 8 3.2.2. Tvorba formulářových polí ............................................................................... 11 3.2.3. Elektronický formulář ....................................................................................... 14 3.2.4. Úložiště dat .................................................................................................... 16 3.2.5. Export formuláře pro vyplňování ...................................................................... 18 3.2.6. Kam dále? ...................................................................................................... 19 3.3. Pokročilá tvorba formuláře ......................................................................................... 19 3.3.1. Vzhled formuláře na papíře ............................................................................. 19 3.3.2. JavaScript editor ............................................................................................. 20 3.3.3. Datové typy položek ........................................................................................ 21 3.3.4. Povinné položky ............................................................................................. 22 3.3.5. Ladění skriptů ................................................................................................. 22 3.3.6. Formátování výstupů ....................................................................................... 23 3.3.7. Vypočtené (nevstupní) položky ........................................................................ 24 3.3.8. Výběry z více možností ................................................................................... 25 3.3.9. Statické oblasti ............................................................................................... 27 3.3.10. Knihovní funkce ............................................................................................ 27 3.3.11. Uživatelské fuknce ........................................................................................ 27 3.3.12. Organizace položek do skupin ....................................................................... 28 3.3.13. Rozložení elektronického formuláře ................................................................ 28 3.3.14. Podpora ukládání dat v databázi .................................................................... 29 3.3.15. Formát dat v úložišti a elektronickém formuláři ................................................ 31 3.4. Další činnosti s formulářem ........................................................................................ 31 3.4.1. Nastavení dokumentu ..................................................................................... 32 3.4.2. Doplnění detekovaných oblastí ........................................................................ 32 3.4.3. Kalibrace pozadí stránky ................................................................................. 33 3.4.4. Znovuprovedení celé detekce .......................................................................... 35 3.4.5. Převod všech detekovaných oblastí na položky ................................................ 35 3.5. Manuál ...................................................................................................................... 35 3.5.1. Položka formuláře ........................................................................................... 36 3.5.2. Oblast tisku .................................................................................................... 38 3.5.3. Vyhodnocování programů položek formuláře ..................................................... 42 3.5.4. Formátovací vzory .......................................................................................... 43 3.5.5. Seznam knihovních funkcí ............................................................................... 47 4. Vyplňovač formulářů ............................................................................................................. 49 4.1. Otevření projektu ve Vyplňovači formulářů .................................................................. 49 4.2. Vyplňování dat ........................................................................................................... 49 4.3. Náhled na tištěný formulář ......................................................................................... 50 4.4. Tisk dat ..................................................................................................................... 51 4.4.1. Pojmenování vytvořených souborů při tisku ...................................................... 53 5. Integrace s PHP ................................................................................................................... 54 6. Detektor oblastí a rotace ....................................................................................................... 55 6.1. Načtení obrázku ........................................................................................................ 55 iii Form Tools 6.2. Nastavení detekce hran ............................................................................................. 6.3. Narovnání obrázku .................................................................................................... 6.4. Oříznutí obrázku ........................................................................................................ 6.5. Kalibrace .................................................................................................................. 6.6. Nastavení detekce obdélníků .................................................................................... 6.7. Tečkované čáry ......................................................................................................... 6.8. Další nastavení ......................................................................................................... 6.9. Detekce a ukončení ................................................................................................... 6.10. Ostatní .................................................................................................................... 7. Závěr ................................................................................................................................... iv 55 57 57 58 58 59 59 59 59 61 Seznam obrázků 1.1. Vývoj formuláře ................................................................................................................... 1 1.2. Návrhář formulářů ............................................................................................................... 2 1.3. Vyplňovač formulářů ............................................................................................................ 2 1.4. Vyexportovaný formulář do HTML ........................................................................................ 3 2.1. Instalační okno .................................................................................................................... 4 2.2. Výpis souborů v instalačním adresáři .................................................................................... 5 3.1. Formulář potvrzení o studiu .................................................................................................. 8 3.2. Dialog pro přidání stránky a detekci oblastí ........................................................................... 9 3.3. Oříznutí obrázku formuláře ................................................................................................. 10 3.4. OCR s vydetekovanými oblastmi ........................................................................................ 11 3.5. Formulář potvrzení o studiu po vytvoření 3 položek ............................................................. 12 3.6. Změna šířky oblasti ........................................................................................................... 13 3.7. Formulář potvrzení o studiu kompletně vytvořený ................................................................ 14 3.8. Návrh elektronického formuláře .......................................................................................... 15 3.9. Automaticky vytvořený elektronický formulář ........................................................................ 16 3.10. Přidání zdroje dat ............................................................................................................ 17 3.11. Nastavení CSV úložiště formuláře ..................................................................................... 17 3.12. Dialog pro export formuláře pro Vyplňovač formulářů ......................................................... 18 3.13. Výběr datového úložiště při exportu formuláře pro Vyplňovač formulářů ............................... 19 3.14. Otevření editoru pro JavaScript ........................................................................................ 20 3.15. JavaScript editor se zvýrazňováním syntaxe ...................................................................... 20 3.16. Nápověda pro automatické dokončení .............................................................................. 21 3.17. Dialog pro ladění skriptů .................................................................................................. 23 3.18. Návrhář formátovacích vzorů ............................................................................................ 24 3.19. Náhled na vzorová data vyplněná v potvrzení o studiu ....................................................... 25 3.20. Přesun oblastí do jiné položky .......................................................................................... 26 3.21. Uspořádání polí v tabulce pro návrh elektronického formuláře ............................................. 29 3.22. Nastavení databázového úložiště formuláře ....................................................................... 30 3.23. Export projektu s databázovým úložištěm .......................................................................... 31 3.24. Nastavení formátu ukládaných dat .................................................................................... 31 3.25. Nastavení tisku formulářů ................................................................................................. 32 3.26. Náhled na vzorová data vyplněná v potvrzení o studiu ....................................................... 33 3.27. Nástroj kalibrace velikosti a pozice pozadí stránky ............................................................. 34 3.28. Dialog pro převod detekovaných oblastí na položky formuláře ............................................ 35 3.29. Společná nastavení položky formuláře. ............................................................................. 36 3.30. Nastavení vstupní položky ................................................................................................ 37 3.31. Nastavení počítané položky .............................................................................................. 38 3.32. Společná nastavení tiskových oblastí ................................................................................ 38 3.33. Nastavení oblasti typu text ............................................................................................... 39 3.34. Nastavení oblsti typu zaškrtávání ...................................................................................... 41 4.1. Prázdný formulář potvrzení o studiu ve Vyplňovači formulářů ................................................ 49 4.2. Náhled na vzorová data vyplněná v potvrzení o studiu ......................................................... 51 4.3. Nastavení tisku formulářů ................................................................................................... 52 4.4. Výpis vytištěných souborů .................................................................................................. 53 6.1. Nastavení detekce hran ..................................................................................................... 55 6.2. Správně nastavený práh .................................................................................................... 56 6.3. Příliš nízký práh ................................................................................................................ 56 6.4. Příliš vysoký práh .............................................................................................................. 57 6.5. Menu pro rotaci ................................................................................................................. 57 6.6. Okno pro potvrzení oříznutí ................................................................................................ 57 6.7. Ořezávací mód .................................................................................................................. 58 6.8. Menu pro nastavení detekce obdélníků ............................................................................... 58 6.9. Menu pro nastavení tečkovaných čar .................................................................................. 59 6.10. Menu pro další nastavení ................................................................................................. 59 6.11. Menu pro detekci a ukončení ............................................................................................ 59 v Form Tools 6.12. Dialog pro nastavení pravítka ........................................................................................... 60 vi Kapitola 1. Úvod Form Tools jeho program, který umožňuje převést papírový formulář do elektronické podoby pro jeho snadnější vyplňování, případně dávkové zpracování. 1.1. Co Form Tools dělají Program poskytuje prostředky, které se snaží tento převod maximálně ulehčit. Například tím, že je možné automaticky detekovat oblasti, které se mají vyplňovat, tyto oblasti je pak možné automaticky převést na samotné položky elektronického formuláře a naprogramovat jim chování tak, aby uživatel, který elektronickou podobu formuláře bude používat, měl při vyplňování maximální pohodlí. Dále je možné nechat automaticky vytvořit rozvržení elektronického formuláře pro vyplňování. Toto rozvržení se snaží zachytit podobu papírové předlohy. Pro hotový formulář je možné určit datové úložiště, do kterého se vyplněná data budou ukládat. Hotový formulář je pak možné použít ve Vyplňovači formulářů, který je součástí balíku Form Tools, používat ve webovém prostředí, případně ve vlastní aplikaci. 1.2. Proces vývoje formuláře Typický postup vývoje formuláře je zobrazen v diagramu 1.1 – „Vývoj formuláře“. Obrázek 1.1. Vývoj formuláře Samotný vývoj formuláře se provádí v aplikaci Návrhář formulářů (3 – „Návrhář formulářů“). Zde lze formulář naskenovat, zdetekovat oblasti, tyto oblasti převést na položky formuláře. Zároveň je možné do formuláře jednoduše přidávat položky jejichž hodnota závisí na ostatních (pomocí skriptů podobných 1 JavaScriptu ). Dále je nutné ve stejné aplikaci navrhnout, jak bude formulář vypadat v elektronické podobě a jak budou ukládána získaná data (do CSV souboru nebo databáze). Poté můžete formulář vyexportovat a tím umožnit jeho vyplňování. 1 Používaný skriptovací jazyk ECMAScript je podmnožinou webového skriptovacího jazyka JavaScript. Má stejnou syntaxi, základní odlišností je to, že v ECMAScriptu nejsou definované objekty pro práci s webovou stránkou (document, window a další). My v tomto dokumentu budeme používat název JavaScript. 1 Úvod Obrázek 1.2. Návrhář formulářů Vyexportovaný formulář lze vyplňovat a pracovat s dříve uloženými daty v aplikaci Vyplňovač formulářů (4 – „Vyplňovač formulářů“). Data lze editovat jak v navrženém elektronickém formuláři, tak v tabulce (vypadající podobně jako Tabulkový kalkulátor). Po vytvoření (popřípadě načtení dat) je možné zobrazit jejich náhled na papíře. Obrázek 1.3. Vyplňovač formulářů Formulář lze také exportovat pro jeho vyplňování na HTML stránce. Všechny skripty jsou přenesené do HTML stránky, takže uživatelé webu nepřichází o komfort při vyplňování formuláře. Údaje vyplněné ve formuláři jsou předzpracované pomocí PHP skriptů na serveru a připraveny k uložení do úložiště. Ze stejného úložiště je možné načíst data do Vyplňovače formulářů a ty poté vytisknout. 2 Úvod Obrázek 1.4. Vyexportovaný formulář do HTML Vytvořený formuláře je také možné používat ve vlastní aplikaci. K tomu slouží tzv. Form Tools API, které poskytuje funkce, pro načtení souboru, zobrazení dialogu pro vyplnění i pro tisk formuláře. Bližší informace o této možnosti je možné najít v programátorské části dokumentace. 3 Kapitola 2. Instalace 2.1. Systémové požadavky Aplikace z balíku Form Tools by měly jít spustit na běžném stolním počítači. Pro provádění náročnějších akcí (detekce oblastí na velkých obrázcích) doporučujeme minimálně 2GB operační paměti a procesor o taktu 2GHz. Form Tools jsou primárně vytvořeny pro operační systém MS Windows, pro který jsou taktéž dostupné ve formě binárního instalačního balíku. Dále by aplikace měla běžet na běžných distribucích operačního systému Linux, pro který je balík distribuován ve formě zdrojových kódů a kompilačních skriptů. 2.2. MS Windows Pro operační systém Windows je připraven instalační balík, který celou sadu nástrojů včetně potřebných knihoven nainstaluje do uživatelem zvoleného adresáře, asociuje formulářové soubory s odpovídajícími aplikacemi(*.ftd s Návrhářem formulářů a *.fts s Vyplňovačem formulářů) a přidá ikony do Start menu a na plochu. Obrázek 2.1. Instalační okno Po úspěšném dokončení instalace se ve zvolené složce nachází spustitelné soubory aplikací, její dokumentace, ukázkové soubory a další soubory důležité pro běh aplikace, viz 2.2 – „Výpis souborů v instalačním adresáři“. 4 Instalace Obrázek 2.2. Výpis souborů v instalačním adresáři FormEditor.exe je hlavní aplikací balíku, slouží k vytváření formulářů, uživatelský manuál k ní se nachází dále v textu v kapitole 3 – „Návrhář formulářů“. Program Filler.exe, 4 – „Vyplňovač formulářů“, umožňuje vytvořené formuláře vyplňovat, spravovat vyplněná data a tisknout je. Složka doc obsahuje dokumentaci k programu a ve složce sample jsou umístěny hotové ukázkové příklady, se které budeme v této dokumentaci vytvářet. 2.3. Linux a další UNIXové systémy Pro operační systémy UNIXového jsou k dispozici zdrojové kódy a sada skriptů pro jejich kompilaci a instalaci. 2.3.1. Potřebné knihovny Pro úspěšnou kompilaci potřebujete knihovnu Qt ve verzi 4.5 a kompilátor C++, například g++. Dále je potřeba mít nainstalovanou knihovnu SANE http://www.sane-project.org/, pro práci se skenerem. 2.3.2. Kompilace a instalace Pokud máte všechny 2.3.1 – „Potřebné knihovny“, můžete rozbalit balík form tools. $ tar xvzf form-tools.tar.gz Přejít do adresáře formtools. $ cd formtools Nakonfigurovat systém pro kompilaci. 5 Instalace $ ./configure Přeložit zdrojové kódy (tento krok bude trvat cca 15 minut). $ make A nainstalovat přeloženou aplikaci do zvoleného cílového adresáře. $ make install [args] Při spuštění příkazu make install je možné ovlinit, kam se výsledná aplikace nainstaluje. Parametr destdir určuje, kam se nainstalují všechny potřebné soubory — knihovny, spustitelné soubory, soubory s překlady atd. Výchozí hodnota je /opt, takže program se nainstaluje do složky /opt/formtools. Parametr bindir pak určuje, do jaké složky se nainstalují odkazy na binární soubory. Výchozí hodnotou je složka /usr/bin. Spuštění programu Po nainstalování se v adresáři bindir vytvoří dva odkazy na soubory fteditor a ftfiller. První soubor spouští návrhář formulářů a druhý jejich vyplňovač. Pokud je cesta do složky bindir v proměnné PATH, je tedy možné zadat přímo $ fteditor [-f filename [-f filename [...]]] resp. $ ftfiller [-f filename] pro jejich spuštění. Oba příkazy je možné doplnit o parametr ve tvaru -f filename, což způsobí, že ihned po spuštění bude otevřen zadaný soubor. 6 Kapitola 3. Návrhář formulářů Návrhář je hlavní aplikací Form Tools. Slouží k vytváření formulářů, jejich skriptování a exportu pro umožnění pozdějšího vyplnění. V aplikaci je možné mít otevřeno více formulářů najednou, mezi nimi lze přepínat v menu Okno. Tip Celý tento návod je psán pro českou lokalizaci aplikace, pokud vidíte texty na obrazovce anglicky, tak si změňte jazyk v menu Settings → Language → Čeština. Změna jazyka se projeví až při příštím spuštění aplikace. 3.1. Vzhled hlavního okna Hlavní okno aplikace je rozdělené na tři hlavní části: Menu a nástrojová lišta obsahují všechny podporované akce s celými formuláři (otevírání, ukládání) a důležité akce pro práci s jednotlivými formuláři (přidávání stránek, úprava vlastností, atd.). Na nástrojové liště jsou umístěny nejčastěji používané akce. Všechny akce v menu a v liště vždy pracují s aktuálním formulářem, popřípadě s jeho aktivní stránkou. Editor formuláře obsahuje záložky s jednotlivými designéry formuláře. V prvním z nich, Papírový formulář umožňuje tvorbu vzhledu formuláře na papíru (jak se později bude tisknout). Další záložky slouží k editaci vzhledu formuláře v aplikacích sloužících pro jeho vyplňování a pro nastavení úložišť zadaných dat. Panely nástrojů a nastavení zobrazují informace o aktuálním formuláři a mění svůj obsah podle vybrané záložky v něm. Tip Panely nástrojů jsou v počátečním rozvržení aplikace umístěné po jejích stranách, je však možné je libovolně přesouvat a měnit jejich velikost. Rozložení panelů a velikost hlavního okna aplikace se ukládá při každém jejím ukončení. 3.2. Tutoriál Práci s aplikací budeme demonstrovat na základě kompletního postupu tvorby formuláře, od jeho naskenování, přes detekci oblastí, vytváření položek formulářů, tvorbu návrhu elektronického formuláře, definici úložiště až po jeho export pro vyplnění. Poté budeme vytvořený formulář vylepšovat tak, aby se s ním lépe pracovalo uživatelům, kteří jej budou vyplňovat. V tuto chvíli přijde na řadu skriptování v jazyce JavaScript 1 V tutoriálu budeme digitalizovat formulář pro Potvrzení o studiu , který uzpůsobíme pro potřeby jedné vysoké školy (některá políčka předvyplníme). Základní formulář, který budeme používat, zobrazuje 3.1 – „Formulář potvrzení o studiu“. 1 Hotový formulář je uložen v instalačním adresáři aplikace v souboru sample/potvrzeni_simple.ftd. Pokud si nebudete čímkoli jistí, můžete tento soubor otevřít v Návrháři formulářů a podívat se, jak je co udělané. 7 Návrhář formulářů Obrázek 3.1. Formulář potvrzení o studiu Formulář má velikost A5 na šířku, v tutoriálu budeme pracovat se stránkou velikosti A4, kde formulář umístíme navrch. 3.2.1. Vytvoření formuláře V aplikaci vytvoříme nový formulář pomocí volby Nový formulář v menu Soubor. To nám vytvořilo prázdný nepojmenovaný formulář s jednou prázdnou stránkou standardní velikosti (A4). Důležité V průběhu práce s Návrhářem formulářů je vhodné, stejně jako v každé jiné aplikaci, si rozdělanou práci pravidelně ukládat. Proto v tuto chvíli, prosím, klikněte do menu, nebo na nástrojovou lištu, na Soubor → Uložit a zvolte soubor pro uložení vytvářeného formuláře. Form Tools Dokumenty používají příponu *.ftd. Pro rychlejší přístup k uložení formuláře můžete použít klávesovou zkratku CTRL+S. Nyní pomocí volby Formulář → Přidat stránku a provést detekci otevřeme dialog pro přidání nové stránky. V dialogu pro detekci políček na formuláři je v hlavní části náhled na přidávaný obrázek, okolo jsou umístěna nastavení detekce polí, viz 3.2 – „Dialog pro přidání stránky a detekci oblastí“. 8 Návrhář formulářů Obrázek 3.2. Dialog pro přidání stránky a detekci oblastí Po kliknutí na ikonu Otevřít soubor zvolíme obrázek s naskenovaným papírovým formulářem (ukázkový soubor je distribuován s aplikací a naleznete jej v instalační složce v sample/potvrzeni_studium_rotated.jpg). Poznámka Pokud máte k počítači připojen scanner, pak jste místo otevření obrázku ze souboru mohli naskenovat obrázek nový. Poklepání na ikonku Scanner otevře standardní systémový dialog pro výběr scanneru a dále v dodaném software k vašemu scanneru naskenuje obrázek. Ten je poté vložen do dialogu pro detekci políček na stránce k dalšímu zpracování. Přiložený obrázek je schválně trochu natočen, abychom mohli ilustrovat funkci automatické detekce narovnání obrázku. Pomocí tlačítka Automaticky narovnat ve skupině Rotace se provede rychlá detekce čar a narovnání obrázku. Nyní můžeme z obrázku oříznout přebývající kusy. Poklepání na ikonku Vyříznout spustí ořezávání obrázku. Nastavte průhledný obdélník tak, jak vidíte na obrázku 3.3 – „Oříznutí obrázku formuláře“ a stiskněte Dokončit. 9 Návrhář formulářů Obrázek 3.3. Oříznutí obrázku formuláře Poté je potřeba nastavit velikost obrázku v milimetrech, ta je sice zjištěna při načtení obrázku, nemusí však být vždy správná. Kalibrační čáru umístíme do dostatečně velkého políčka na formuláři (například do pole Vysoká škola). Při umisťování okrajů čáry na hranu okénka si obrázek dostatečně přiblížíme pomocí skrolování kolečka myši při držení klávesy CTRL. Po umístění čáry změříme velikost políčka na papíře a údaj v milimetrech zadáme do pole Délka čáry. Na ukázkovém obrázku je šířka políčka Vysoká škola přesně 164 mm. Další nastavení v dialogu slouží k detailnějšímu nastavení chování detekce oblastí, my se však spokojíme se standardními hodnotami a pustíme detekci pomocí tlačítka Provést analýzu. Aplikace by nyní měla vypadat následovně: 10 Návrhář formulářů Obrázek 3.4. OCR s vydetekovanými oblastmi Po skončení detekce se nám zobrazí nalezené oblasti (ohraničené červeně) a my můžeme dialog ukončit tlačítkem Ukončit a pokračovat ve vytváření formuláře. Detailní popis nastavení detekce naleznete v kapitole 6 – „Detektor oblastí a rotace“. 3.2.2. Tvorba formulářových polí Po úspěšném přidání stránky do formulářů se vrátíme do návrháře formulářů, kde můžeme začít vytvářet políčka formuláře. Detekované oblasti jsou pouze nápovědy pro umístění políček na formuláři (detekovaná oblast sama o sobě nemůže nabývat žádné hodnoty a při tisku formuláře se nezobrazuje). Ne každé položka formuláře je jednoduchá, některé položky se mohou fyzicky skládat z více oblastí, které však dohromady nabývají jedné hodnoty. Příkladem složené položky je například rodné číslo, které má 10 oblastí, každou pro jednu číslici. Proto v programu a i dále v textu budeme rozlišovat mezi položkou formuláře, která reprezentuje jedno celé pole na formuláři a nabývá nějaké hodnoty (například 800120/3221), a tiskovou oblastí, což pro nás znamená obdélníkové místo na formuláři, do kterého lze něco napsat (například jedna číslice rodného čísla). Položky formuláře tedy mohou sestávat z libovolného počtu tiskových oblastí. Detekované oblasti tedy odpovídají tiskovým oblastem a naším úkolem nyní bude je seskupit do formulářových polí. Detekované oblasti jsou na stránkách zobrazené červeně, žlutě a zeleně a tiskové oblasti modře a šedivě (podle jejich typu). Podrobnější vysvětlení použité terminologie a vlastností položek a formulářů je v kapitolách 3.5.1 – „Položka formuláře“ a 3.5.2 – „Oblast tisku“. Obecně platí, že vlastnosti položek určují typ hodnot, kterou položka má a popis, jak tuto hodnotu získat. Vlastnosti oblastí naopak určují, jak některou část celkové hodnoty položky vytisknout na papír (jako zarovnání textu, font atd.). V základním rozložení aplikace máme v levém sloupci základní přehled typů tiskových oblastí podle typu dat, který jsou schopny zobrazit. Přetažením vzorové oblasti na formulář vytvoříte novou oblast, která je umístěna do taktéž nově vytvořené položky formuláře. Pokud vzorovou oblast přetáhneme nad detekovanou oblast, pak tato zoranžoví a zvýrazní tak pozici, na které bude nová tisková oblast vytvořena (detekovaná oblast v tu chvíli zmizí). Postupně tedy přetáhneme tři oblasti typu Text do 11 Návrhář formulářů políček Vysoká škola, Fakulta a Obor, čímž nám vzniknou položky polozka1, polozka2 a polozka3 a každá z nich bude vlastnit jednu tiskovou oblast. Hlavní okno aplikace pak vypadá přibližně takto 3.5 – „Formulář potvrzení o studiu po vytvoření 3 položek“. Obrázek 3.5. Formulář potvrzení o studiu po vytvoření 3 položek Poznámka Pokud vám uvedeným postupem nevznikly 3 nové formulářové položky, pak nemáte zaškrtnutou volbu Úpravy → Pokaždé vytvářet nové položky , což způsobuje umisťování nově vytvářených oblastí do aktuálně vybrané položky (v seznamu Položky formuláře je aktuální položka zvýrazněna tučně). Undo a redo Pokud se vám něco nepovede, nemusíte si zoufat. Ve všech aplikacích Form Tools je ukládána historie akcí. Ty jdou poté kliknutím na tlačítko vrátit zpět (popřípadě později zase obnovit). Návrat zpět lze taktéž provést pomocí klávesové zkratky CTRL+Z, naopak obnovení naposledy vrácené změny se provádí zkratkou CTRL+Y. Vytvořené položky nyní přejmenujeme, abychom se v jejich seznamu lépe orientovali (až později budeme vytvářet skripty, tak se nám bude rozumné pojmenování položek hodit). Kliknutím na oblast v řádku s titulkem Vysoká škola vybereme jí odpovídající položku v seznamu vpravo, dvojklikem na identifikátor položky se dostaneme do editačního módu, kde zadáme vysoka_skola a potvrdíme klávesou ENTER. Jméno položky může být složeno z písmenek anglické abecedy, číslic a podtržítka. Při přejmenování dalších položek budeme postupovat trochu jinak, abychom si ukázali způsob práce s vlastnostmi položek. V seznamu Položky formuláře vyberte položku polozka2, tím se na papírovém formuláři zvýrazní všechny její oblasti (aktuálně jenom jedna) a v seznamu Vlastnosti položky formuláře se zobrazí vlastnosti vybrané položky. Dvojkliknutím do sloupečku Hodnota v řádku Identifikátor se dostaneme do módu editace identifikátoru položky a můžeme zadat její nové jméno, například fakulta. 12 Návrhář formulářů Po potvrzení nového jména se změní název položky i v seznamu Položky formuláře. V seznamu Vlastnosti položky formuláře jsou zobrazeny všechny editovatelné vlastnosti vybrané položky, jejich detailní popis je v kapitole 3.5.1 – „Položka formuláře“. Editace vlastností více položek (a oblastí) najednou V seznamech Vlastnosti položky formuláře a Vlastnosti oblasti tisku lze najednou měnit vlastnosti více položek (popřípadě tiskových oblastí) najednou. Stačí jich pouze vybrat více najednou (kliknutím na nevybranou položku při současném držení klávesy CTRL). Vlastnosti, jež u vybraných položek nemají stejnou hodnotu jsou zvýrazněny šedým pozadím a v kolonce Hodnota mají uvedeno rozdílné hodnoty. Při najetí myší nad takovouto vlastnost se zobrazí seznam rozdílných hodnot dané vlastnosti ve vybraných položkách. Nyní si ukážeme další možnosti převodu oblastí. Vyberte detekovanou oblast Jméno a příjmení a zmáčkněte klávesu ENTER. Tím dojde k převodu aktuálně vybrané detekované oblasti na oblast tiskovou, 2 která bude umístěna do nově vytvořené položky, polozka1 . Vlastnosti nově vytvořené oblasti jsou vybrány podle aktuálního prvku v seznamu Základní typy oblastí . Stejný postup funguje i na převod více oblastí najednou, ty jsou pak všechny umístěny do jedné položky, což se hodí například na políčko Rodné číslo. Při převodu jsme vynechali políčko akademický rok, které nám detektor oblastí správně nalezl, avšak již nerozdělil na dvě části pro dva různé roky, což my chceme. Nejprve v seznamu vzorových oblastí vybereme Jedno slovo a poté z políčka jedním z výše popsaných způsobů vytvoříme položku rok_prvni. Poté najedeme myší nad pravý okraj vytvořené textové oblasti, zobrazí se nám kurzor na změnu velikosti oblasti a při současném držení levého tlačítka myši a pohybu kurzoru oblast zmenšíme, aby zabírala pouze levou část kolonky, viz 3.6 – „Změna šířky oblasti“. Obrázek 3.6. Změna šířky oblasti Pro vytvoření oblasti (a položky) pro druhou půlku akademického roku použijeme jiný postup, najedeme myší do levého horního rohu obdélníku, ve kterém chceme vytvořit novou oblast, a při současném držení klávesy SHIFT a levého tlačítka myši přejedeme kurzorem do pravého dolního rohu obdélníku. Tím vytvoříme novou oblast, která bude umístěna do nové položky, tu přejmenujeme na rok_druhy. Hýbání s oblastmi a jejich klonování Pokud se vám nepovedlo nakreslit novou oblast na správné místo, můžete ji přesunout tažením myši. Takto lze přesouvat více oblastí najednou (vždy jsou přesunuty všechny vybrané oblasti z jedné stránky). Pokud před přesunem držíte klávesu CTRL, tak dojde k naklonování vybraných oblastí a přesunu těch nových. Při klonování oblastí jsou všechny umístěny do nově vytvořené položky v případě, že je zaškrtnuta volba Pokaždé vytvářet nové položky, v opačném případě jsou nové oblasti přidány na konce seznamů jejich vlastních položek. Na formuláři nám ještě zbývají dva zatím neprozkoumané typy políček, a to zaškrtávací pole (pro výběr jedné z možností) a položka s více oblastmi. Nejprve se podívejme na položky s více oblastmi pro políčko rodné číslo . Ze seznamu typů oblastí přetáhneme Jeden znak nad první políčko rodného čísla, zatím však nepouštíme levé tlačítko myši. První detekovaná oblast rodného číslo zoranžoví a tím zobrazí, kde bude vytvořena nová oblast. Pokud v tuto chvíli zmáčkneme klávesu CTRL, tak se zvýrazní celá skupina deseti detekovaných oblastí. V tuto chvíli můžeme pustit levé tlačítko myši, teprve poté můžeme pustit klávesu CTRL a namísto deseti detekovaných oblastí máme deset tiskových oblastí, které byly všechny přiřazeny do nově vytvořené položky formuláře. Tu můžeme přejmenovat na rodne_cislo a typ dat jí nastavit na Celé číslo. 2 Položku s tímto jménem jsme na formuláři již měli, ale přejmenovali ji na vysoka_skola. Automatické pojmenovávání vždy zvolí pro novou položku jméno s nejmenším číslem, které v aktuální skupině položek ještě není. 13 Návrhář formulářů Poslední typ políček na formuláři jsou zaškrtávací pole, konkrétně studijní program a forma studia. V těchto místech nám detekce nalezla jeden velký obdélník, který nám nevyhovuje. Proto všechny špatně vydetekované oblasti označíme a stiskem klávesy DELETE je smažeme. Práce se zaškrtávacími poli je poněkud složitější, proto zatím v rámci tohoto tutoriálu tento problém vyřešíme jednoduše, jeho čistší a příjemnější řešení ponecháme na kapitolu 3.3.8 – „Výběry z více možností“. Nejprve vybereme 3 vzorovou oblast typu Zakroužkování a poté nakreslíme tři nové oblasti, každou přes jednu z možností bakalářský, magisterský a doktorský. To nám vyrobí tři položky typu Ano/Ne, které vhodně pojmenujeme. Tím je práce hotova, stejným způsobem můžeme vytvořit i položky pro volbu formy studia. Tip Oblasti na stránce se dají taktéž vybírat tažením myši. Stačí zmáčknout a držet levé tlačítko myši v místě bez oblastí a přetáhnout výběrový obdélník přes oblasti. Po puštění levého tlačítka myši budou všechny překryté oblasti vybrány. Zbytek formuláře tvoří nám už známé typy oblastí, vytvoříme z nich tedy formulářové položky stejným způsobem. Pro zbytek oblastí použijeme typ oblasti Text. Jednořádkovým oblastem pak můžeme nastavit vlastnost Víceřádkový text na hodnotu Ne. U položek reprezentujících datum, můžeme nastavit Typ položky na Datum. Správné nastavení typů položek usnadňuje kontrolu automatickou kontrolu vstupních dat. Po dokončení převodu formuláře a smazání přebývajících detekovaných oblastí vypadá aplikace jako na obrázku 3.7 – „Formulář potvrzení o studiu kompletně vytvořený“. Obrázek 3.7. Formulář potvrzení o studiu kompletně vytvořený 3.2.3. Elektronický formulář Po definici vzhledu formuláře na papíře je potřeba vytvořit vzhled formuláře v aplikacích, které jej budou zobrazovat uživatelům k vyplnění. Tuto úlohu můžeme provést v záložce Elektronický formulář, vpravo vedle záložky, na které jsme vytvářeli vzhled formuláře na papíře. 3 V zápatí formuláře se píše, že se mají nevhodné možnosti škrtnout, my však pro jednoduchost zvolíme kroužkování správných voleb. Zvýraznění správné volby má tu výhodu, že se nemusí převracet logická hodnota vstupu z formuláře. 14 Návrhář formulářů Po přepnutí na záložku pro editaci elektronické podoby formuláře vidíme po levé straně seznam vstupních položek (těch, které jsou potřeba vyplnit od uživatele), uprostřed se nachází tabulka, ve které vytvoříme návrh a po pravé straně jsou nastavení jednotlivých položek elektronického formuláře a celého formuláře, viz 3.8 – „Návrh elektronického formuláře“. Obrázek 3.8. Návrh elektronického formuláře Naším úkolem je nyní přetahat všechny položky ze seznamu Ovládací prvky do tabulky. Pro tuto chvíli se spokojíme s nejjednodušším, automatickým rozložením ovládacích prvků na elektronickém formuláři. Toho docílíme kliknutím na ikonu Vytvořit ovládací prvky pro všechny položky formuláře. Nyní vidíme (na 3.9 – „Automaticky vytvořený elektronický formulář“), že každá ze vstupních položek je reprezentovaná dvěma buňkami, jednou pro zobrazení názvu pole a jednou buňkou pro ovládací prvek sloužící k editaci hodnoty položky. Ovládací prvky jsou vytvořeny automaticky podle zvoleného typu položky na papírovém formuláři. Vlastnosti jednotlivých ovládacích prvků můžeme editovat v seznamu Vlastnosti položek formuláře. 15 Návrhář formulářů Obrázek 3.9. Automaticky vytvořený elektronický formulář Dále je potřeba formulář trochu poupravit, aby uživatelé věděli, co do které kolonky patří. Pro změnu zobrazovaného titulku u políčka vysoka_skola vybereme tento ovládací prvek dvojklikem myši v tabulce (popřípadě jej můžeme vybrat ze seznamu Položky) a v seznamu jeho vlastností upravíme hodnotu vlastnosti Statický text na Vysoká škola. Ostatní popisky můžeme upravit stejným způsobem. V tabulce poté ještě rozšíříme první i druhý sloupeček tak, aby se do nich popisky a ovládací prvky vešly. Sloupce lze rozšiřovat v záhlaví tabulky. Tabulka umožňuje přesouvání polí, spojování více polí dohromady (vytváření větších polí obdélníkového tvaru), tvorbu rozložení podle formuláře a spoustu dalších věcí pro tvorbu tabulkového formuláře. My se prozatím spokojíme s aktuálním rozložením políček, k rozložení dat v tabulce se dostaneme v kapitole 3.3.13 – „Rozložení elektronického formuláře“. 3.2.4. Úložiště dat V tuto chvíli máme již navrženo rozložení formuláře na papíře (umíme jej tisknout) a vzhled formuláře na obrazovce pro uživatele, kteří budou formulář vyplňovat. Nyní do formuláře doplníme možnost ukládání získaných dat. To se hodí skoro pokaždé, protože ne vždy chceme formulář ihned po vyplnění uživatelem vytisknout. Spíše naopak čekáme, až dostatečný počet uživatelů formuláře vyplní najednou a až poté provedeme jejich další zpracování, popřípadě tisk. Form Tools podporují dva typy úložišť dat, jednak obyčejný textový soubor se sloupci oddělenými speciálními znaky (nejčastěji čárkou nebo středníkem), tzv. CSV formát. Druhou možností úložiště je databáze. V tomto tutoriálu vybereme jednodušší ze dvou variant, CSV soubor a definici databázového úložiště ponecháme do kapitoly 3.3.14 – „Podpora ukládání dat v databázi“. Pro přidání definice CSV úložiště potřebujeme přidat další záložku do našeho dokumentu. To provedeme výběrem Formulář → Přidat definici úložiště formuláře , v nově otevřeném dialogu 3.10 – „Přidání zdroje dat“ vybereme typ CSV a zadáme identifikátor úložiště. Po potvrzení tlačítkem OK se dostaneme do záložky pro editaci CSV úložiště. 16 Návrhář formulářů Obrázek 3.10. Přidání zdroje dat Poznámka V rámci jednoho formuláře může být více definicí vzhledu elektronického formuláře a více definicí úložišť. Proto je při jejich vytváření nutné zadávat unikátní identifikátor. Nově vytvořená záložka má vzhled podobný jako záložka pro definici elektronického formuláře (viz 3.11 – „Nastavení CSV úložiště formuláře“. Jediným rozdílem je střední část, kde je zobrazena tabulka pro mapování z identifikátorů položek na jména sloupečků výsledného CSV souboru. My se i zde spokojíme se standardními názvy a pořadím sloupců souboru a poklepáním na ikonu Vytvořit ovládací prvky pro všechny položky formuláře přesuneme všechny položky do tabulky. V té již nepotřebujeme nic měnit. Jména sloupců je možné měnit v centrální tabulce, v seznamu Položky formuláře nebo v seznamu Vlastnosti položek. V seznamu Vlastnosti je možné upravovat nastavení celého souboru, jako je Oddělovač sloupců a Uvozovací znak. Uvozovací znak slouží k ohraničení každého sloupce, oddělovač je pak vložen mezi každé dva sloupce v CSV souboru. Nám zde postačí standardní hodnoty. Obrázek 3.11. Nastavení CSV úložiště formuláře Pořadí sloupců v souboru je možné měnit v seznamu Položky formuláře. Zde stačí označit několik řádků, poté je chytnout myší a odnést na nové místo. Po puštění levého tlačítka myši budou přenášené řádky vloženy na novou pozici, ostatní jsou posunuty. 17 Návrhář formulářů 3.2.5. Export formuláře pro vyplňování Nyní již máme formulář celý navržen a můžeme jej vyexportovat do aplikace určené k jeho vyplňování. Formuláře vytvořené v Návrháři formulářů je možné vyplňovat dvěma způsoby, buďto přes webové stránky, kde lze výsledky zpracovat pomocí automaticky generovaných PHP skriptů. Druhou možností je vyplňování formuláře a správa jeho dat v aplikaci Vyplňovač formulářů. My si vybereme export do Vyplňovače formulářů, který je dostupný v menu Soubor → Export formuláře → Pro aplikaci Vyplňovač formulářů . To nám otevře dialog 3.12 – „Dialog pro export formuláře pro Vyplňovač formulářů“, kde seznam Elektronický formulář obsahuje námi definované vzhledy elektronického formuláře (tedy jeden jediný). Obrázek 3.12. Dialog pro export formuláře pro Vyplňovač formulářů Zaškrtávací políčko Exportovat bez obrázku na pozadí a rozpoznaných oblastí necháme nezaškrtnuté. V případě, že bychom jej zaškrtli, bychom si v aplikaci pro vyplňování formulářů nemohli zobrazit náhled na získaná data na papírovém formuláři. Stiskem tlačítka Přidat nové datové úložiště otevřeme dialog 3.13 – „Výběr datového úložiště při exportu formuláře pro Vyplňovač formulářů“. 18 Návrhář formulářů Obrázek 3.13. Výběr datového úložiště při exportu formuláře pro Vyplňovač formulářů Zde v seznamu Typ datového zdroje vybereme identifikátor vytvořeného CSV úložiště a další kolonky popisující jméno úložiště v aplikaci Vyplňovač formulářů a cestu k souboru, do kterého vytvořená data ukládat (relativní vůči souboru exportovaného projektu), necháme nezměněny. Dialog potvrdíme a vracíme se zpět do dialogu na export formuláře (3.12 – „Dialog pro export formuláře pro Vyplňovač formulářů“), kde nám do tabulky přibyl řádek s vybraným úložištěm. Nyní jsme aplikaci poskytli všechny důležité informace pro export formuláře pro jeho vyplňování (tedy způsob, jak jej zobrazovat i kam ukládat data) a můžeme pokračovat k výběru souboru, do kterého projekt uložit. Poznámka V tomto kroku jsme mohli do exportovaného dokumentu přidat více datových úložišť. Tím bychom dosáhli toho, že bychom si mohli data ve vyplňující aplikaci rozdělit do více souborů. V našem případě bychom si mohli pořídit jeden CSV soubor pro každou fakultu naší školy a mít potvrzení od studentů rozdělená do souborů, avšak všechna pohromadě na jednom místě v aplikaci Vyplňovač formulářů. Po výběru cesty k souboru, do kterého projekt exportovat (*.fts soubor), je tento uložen. Do stejné složky je přidána uložená definice celého formuláře (*.ftd dokument) a jsou založeny všechny přidané soubory pro ukládání dat (*.csv). 3.2.6. Kam dále? Právě jsme dokončili tvorbu jednoduchého formuláře, který jsme vyexportovali pro jeho vyplňování. Nyní máte dvě možnosti, kam se v dokumentaci ubírat. Buďto můžete pokračovat pokročilými kapitolami o tvorbě formulářů (v 3.3 – „Pokročilá tvorba formuláře“), nebo můžete nahlédnout do základů práce s Vyplňovačem formulářů a v kapitole 4.1 – „Otevření projektu ve Vyplňovači formulářů“ pokračovat vyplňováním právě vytvořeného formuláře. Vytvořený ukázkový formulář je distribuován s aplikací a je uložen v instalačním adresáři v souboru sample/potvrzeni_simple.ftd, vyexportovaný formulář pro Vyplňovač formulářů pak ve složce sample/potvrzeni-simple/. 3.3. Pokročilá tvorba formuláře V tutoriálu jsme si ukázali pouze základní možnosti aplikace, vytvořili jsme tak jednoduchý statický formulář. V následujících kapitolách budeme vytvořený formulář přetvářet tak, aby se lépe vyplňoval uživatelů, a také proto, abychom předvedli další vlastnosti Návrháře formulářů. Při práci s položkami formuláře a tiskovými oblastmi budeme používat jejich vlastnosti bez bližšího vysvětlení, to je totiž možné najít v manuálu v kapitole 3.5 – „Manuál“. 3.3.1. Vzhled formuláře na papíře Pro ladění vzhledu vlastností tiskových oblastí je v editoru možnost zobrazení náhledu přes ikonku Náhled, které zobrazí dialog s náhledem na formulář vyplněný vzorovými daty. Dialog náhledu je popsán 19 Návrhář formulářů v dokumentaci k Vyplňovači formulářů v 4.3 – „Náhled na tištěný formulář“. V této sekci jej budeme používat pro kontrolu vzhledu. První věc, které si všimneme v náhledu jsou různé velikosti fontů a to, že texty v oblastech jsou příliš přiražené k levým horním okrajům. Vybereme tedy všechny textové oblasti a nastavíme jim vlastnost Písmo. Kliknutím na ikonku Otevřít dialog pro výběr fontu zobrazíme standardní systémový dialog, kterým můžeme vybrat název, velikost a styl písma. Velikost fontu je uvedena jako dvojnásobek počtu milimetrů, které bude dané písmo zabírat na papíře. Odsazení udává vzdálenost od okrajů v rámci oblastí, do které se nesmí psát text, tato vlastnost nám poslouží k posunutí textů v rámci polí o trošku doprava dolů. Poté ještě můžeme zmenšit velikost textu pro víceřádkové oblasti, aby se nám vešly 3 řádky pod sebe. Dále u políček rok_prvni nastavíme Horizontální zarovnání na Doprava a u rok_druhy na Doleva, tím docílíme, že ročník bude blízko u sebe a můžeme si pohrát se zarovnáním dalších oblastí. Dále u víceřádkových políček nastavíme Přetečení na Zmenšit font, což nám zajistí, že text vpisovaný do této kolonky nepřesáhne spodní okraj, místo toho dojde ke zmenšení písma tak, aby se do kolonky vešel celý text. 3.3.2. JavaScript editor V následujících kapitolách budeme pracovat se programy napsanými v JavaScriptu. Takovéto programy mohou být značně dlouhé a je nepohodlné je vyplňovat v editoru v jednom řádku, jako na obrázku 3.14 – „Otevření editoru pro JavaScript“. Obrázek 3.14. Otevření editoru pro JavaScript Kliknutím na ikonku Otevřít JavaScript editor pro pohodlnější editaci programu se otevře nové dialogové okno, ve kterém je možné upravovat program, 3.15 – „JavaScript editor se zvýrazňováním syntaxe“. Obrázek 3.15. JavaScript editor se zvýrazňováním syntaxe Kromě zvýrazňování syntaxe patrného z obrázku navíc editor podporuje automatické odsazování textu a automatické dokončování názvů položek (a skupin) a jejich funkcí. Pro vyvolání nápovědy pro dokončení aktuálního identifikátoru (3.15 – „JavaScript editor se zvýrazňováním syntaxe“) zmáčkněte upro- 20 Návrhář formulářů střed psaní slova kombinaci kláves CTRL+MEZERA, poté můžete šipkami vybrat požadovanou volbu, do textu ji vložíte stisknutím klávesy ENTER. Obrázek 3.16. Nápověda pro automatické dokončení Poznámka Nastavení funkcí a vzhledu skriptového editoru naleznete v hlavním menu aplikace v Nastavení → Nastavení v záložce JavaScript. Všechny položky formuláře (a i skupiny položek) jsou v JavaScriptu reprezentovány objekty, k jednotlivým položkám (funkcím a podobjektům) se přistupuje pomocí oddělovače . (tečka). Z obrázku 3.16 – „Nápověda pro automatické dokončení“ je vidět, že objekt pro skupinu obsahuje jako svoje atributy všechny své podskupiny a položky, plus metody pro práci s nimi. Pro všechny položky je potřeba používat plná hierarchická jména za všech okolností (k hodnotě položky polozka ve skupině skupina se přistupuje pomocí kódu skupina.polozka.value()). Programy ve všech vlastnostech položek mohou mít dva tvary. Buďto mohou být zadány jako výraz začínající znakem = a končící znakem ;. Například: = cista_cena.value() * ( 1 + dan.value() / 100); Druhý způsob zadání programů je vytvořením těla funkce (bez její hlavičky). V takovémto kódu je možné používat příkazy pro řízení toku programu (rozhodovací příkaz, cykly, atd.). Tělo funkce není ničím odvozeno, výsledek se vrací pomocí příkazu return NAVRATOVA_HODNOTA;. Ukázka výpočtu celkové ceny pro dvě různé sazby daně pro potraviny a ostatní zboží: if (vyrobek_typ == "Potraviny") return cista_cena.value() * 1.05; else return cista_cena.value() * 1.20; Varování V JavaScriptu hrají důležitou roli znaky nových řádků, ty mají stejný účinek jako znak ; (středník), tedy ukončují aktuální příkaz. Při psaní programů je potřeba na toto dbát a nepsat výrazy přes více řádek. Změny v kódu potvrdíte stiskem tlačítka OK, čímž se přepnete zpět do zobrazení vlastnosti v seznamu vlastností. K otestování správnosti napsaného kódu můžete před uložením stisknout tlačítko Zkontrolovat, které vypíše OK nebo pozici první chyby v kódu, v tom případě ještě nastaví kurzor v editoru na tuto pozici. 3.3.3. Datové typy položek Položkám můžeme nastavit datové typy podle očekávaných vstupních hodnot. To nám později umožní použít automatické kontroly vstupních hodnot z formulářů a také nasazení specializovaných editorů při vytváření elektronického formuláře. Vybereme tedy položky dne a datum_narozeni a nastavíme jim Typ na Datum. rok_prvni, rok_druhy, rocnik a rodne_cislo jsou naopak Celá čísla. 21 Návrhář formulářů Pro rodné číslo navíc platí omezení, že jeho hodnota musí být dělitelná jedenácti. Ke kontrole platnosti hodnoty nám slouží vlastnost položky Validita, do které můžeme zapsat kód v jazyku JavaScript. if (this.value() % 11 == 0) return true; else return "Neplatné rodné číslo."; Vrácení true označuje platnou hodnotu, zatímco false nebo řetězec oznamující chybovou hlášku označují neplatnou hodnotu. Podobně můžeme zkontrolovat, že zadaný první rok je v rozumném rozmezí: if (this.value() > 2000 && this.value() < 2100) return true; else return "Zadejte rok v intervalu (2000, 2100)."; Druhou část školního roku prozatím nebudeme kontrolovat, protože z ní v následujících kapitolách uděláme hodnotu vypočtenou. 3.3.4. Povinné položky Všechny položky jiného typu než Řetězec jsou automaticky považované za povinné a je v nich požadována neprázdná vstupní hodnota (jinak jsou nevalidní). To platí pouze v případě, že u nich nejsou nastaveny Implicitní hodnoty. Implicitní hodnoty se hodí například pro číselné kolonky v daňovém přiznání, kde nemusíme uživatele nutit vyplnit všechny položky, ale do nevyplněných si domyslíme nuly. U položek typu Řetězec je považován i prázdný řetězec za správnou hodnotu. Tudíž zde musíme případné povinné hodnoty doprogramovat ručně, čehož lze jednoduše dosáhnout následujícím skriptem pro vlastnost Validita: = this.value() != ""; Poznámka V každém z programů zadávaném do systému máme za úkol vrátit nějakou hodnotu (jedná se o deklarativní programování). To lze učinit dvěma způsoby, buďto můžeme napsat standardní program v JavaScriptu a proložit jej příkazy na návrat hodnoty (return), nebo můžeme napsat = VYRAZ;, jako v tomto případě. 3.3.5. Ladění skriptů Nyní se podíváme na to, co dělat v případě, že chceme napsaný kód programů ladit (zkontrolovat, zda funguje správně). Jedním ze způsobů této kontroly je vyexportování formuláře pro Vyplňovač formulářů, následné otevření formuláře v této aplikaci, kontrola funkčnosti, návrat do Návrháře formulářů a oprava skriptů. Jak vidno, tento způsob není nikterak jednoduchý, má však jednu výhodu: ve vyexportovaném projektu můžeme mít v datových úložištích uložena data, která ve Vyplňovači formulářů rovnou otevřeme a zkusíme. Při opravě skriptů pak nemusíme exportovat celý projekt znovu, pokud neměníme datové zdroje, stačí nám uložit formulář jako *.ftd dokument v exportovaném projektu. Pro jednodušší ladění skriptů je přímo v Návrháři formulářů Script debugger, který spustíme poklepáním na ikonku Ladění skriptů. To nám spustí dialog 3.17 – „Dialog pro ladění skriptů“. V levé části je vidět okno s aktuálním elektronickým formulářem, kde můžeme zadat vstupní data a kde vidíme výsledky 22 Návrhář formulářů validity. V pravé části je potom JavaScript editor (3.3.2 – „JavaScript editor“) se všemi programy všech položek formuláře. Obrázek 3.17. Dialog pro ladění skriptů Editor obsahuje definice všech programů položek formuláře zobrazených ve tvaru hierarchicke_jmeno_polozky.jmeno_programu =, poté následuje implementace programu ve dvou tvarech, podle toho, jak byl zadán kód dané vlastnosti dříve v editoru programů. Pokud byl kód zadaný výrazem, pak následuje hodnota výrazu, v případě těla funkce následuje definice anonymní funkce. Definice takovéto funkce je vidět na obrázku 3.17 – „Dialog pro ladění skriptů“. V tomto dialogu je možné jednak vyplňovat data, ta jsou rovnou vyhodnocována (vždy po opuštění editačního pole). V editoru kódu lze rovnou programovat funkčnost jednotlivých položek. Po kliknutí na tlačítko Uložit skript jsou data ve formuláři znovu vyhodnocena. Tlačítko Zobrazit náhled zobrazí aktuálně vyplněná data (pokud jsou všechna validní) na papírovém formuláři. 3.3.6. Formátování výstupů Ne vždy chceme hodnotu do papírového formuláře vytisknout v předem definovaném formátu, například u reálného čísla chceme zvolit počet desetinných míst, oddělovač tisíců a další parametry. Proto má každá položka vlastnost Formátovací vzor, která obsahuje program formátující její hodnotu. Zformátovaná hodnota je poté posílána do jednotlivých oblastí položky pro její zobrazení na formuláři. Formátovat všemožné hodnoty pomocí JavaScriptového programu by bylo velmi náročné a zbytečně se opakující. Proto je pro uživatele připravena funkce this.format(), která jako parametr bere formátovací řetězec. Jejím výstupem je zformátovaná hodnota this.value(). V našem příkladě se rozhodneme pro zformátování výstupů datumů. Vybereme tedy položky datum_narozeni a dne a nastavíme jim hodnotu vlastnosti Textový výstup na = this.format("{day}.{month}.{year}"); 23 Návrhář formulářů Přehled formátovacích řetězců je v kapitole 3.5.4 – „Formátovací vzory“. Protože návrh formátovacích vzorů není zcela jednoduchá záležitost, je k dispozici návrhář těchto vzorů, který se snaží proces vytvoření vzoru maximálně usnadnit. Obrázek 3.18. Návrhář formátovacích vzorů Návrháře je možné spustit z řádku pro editaci vlastnosti Textový výstup stisknutím ikony Otevřít návrhář formátovacích vzorů. Návrháře je taktéž možné pustit z editoru skriptů z kontextového menu vyvolaného nad jménem funkce format popřípadě stisknutím kláves CTRL+MEZERA po dopsání názvu funkce format. V prvním seznamu je možné vybrat typ, pro který bude vzor navrhován. Ve druhém seznamu pak jsou vylistovány předpřipravené vzory pro zvolený typ. Je tedy možné dvojklikem vybrat požadovaný tvar výstupu a odpovídající vzor se doplní do textového pole. Pokud by chtěl uživatel vzor pozměnit (nebo vytvořit zcela nový) může toto textové pole editovat. V textu jsou vždy zvýrazněné dílčí vzory a chybné jsou podtrženy. Pokud je vzor správný, zobrazuje se v poli Náhled náhled na vyhodnocený vzor pro vzorová data, je zvýrazněný dílčí vzor, na kterém se aktuálně nachází kurzor a jsou aktivní prvky pro nastavení jeho vlastností. Vždy jsou povoleny ty prvky, které odpovídají atributům, které lze ve vybraném vzoru měnit. Prvek Minimální šířka odpovídá atributu width, Styl odpovídá atributu style, Oddělovač skupin odpovídá group-separator, Desetinná tečka atributu decimal-separator a Vyplňovací znak atributu padding. Dále je možné vybrat národní prostředí pro které se vzor bude vyhodnocovat. Případné chyby jsou zobrazovány ve stavové liště. Tlačítka Zkrátit a Rozšířit převádí vzor na zkrácený resp. rozšířený tvar, který je lépe čitelný, ale zabírá více místa. 3.3.7. Vypočtené (nevstupní) položky Na našem formuláři je jedna položka, rok_druhy, u které nemá smysl, aby jí uživatel vyplňoval, protože je vždy o 1 větší než hodnota položky rok_prvni. Nejprve je potřeba změnit vlastnost vypočtené položky Vstupní položka na Ne, tím se nám změní seznam jejích vlastností a vlastnost Hodnota položky, do které se píše program pro výpočet hodnoty, se nám označí jako chyba, protože není vyplněna. Tuto chybu můžeme napravit zadáním jednoduchého programu: = rok_prvni.value() + 1; Na stavové liště aplikace vpravo dole je zobrazen počet chyb, který funguje jako tlačítko, kliknutím na text Nalezeny 2 chyby se nám zobrazí seznam chyb jako na obrázku 3.19 – „Náhled na vzorová data vyplněná v potvrzení o studiu“. 24 Návrhář formulářů Obrázek 3.19. Náhled na vzorová data vyplněná v potvrzení o studiu U každé chyby je zobrazen odkaz (modrý text), kliknutí na něj nás přepne do správné záložky a zvýrazní chybnou položku. Kliknutím na první odkaz, zvýraznit položku, se přepneme do elektronického formuláře, kde nám je vybrána položka rok_druhy, u které nám stačí změnit hodnotu vlastnosti Typ položky na Statický text, jak nám říká i text chyby. Poznámka Ovládací prvek pro druhý rok bychom mohli z elektronického formuláře úplně smazat, my ji tam však necháme, aby byla tato informace vidět při vyplňování formuláře. K položce způsobující druhou chybu se dostaneme stejným způsobem a nyní ji potřebujeme odstranit. Proto na ni klikneme a zmáčkneme klávesu DELETE, popřípadě z jejího kontextového menu zvolíme možnost Odstranit vybrané ovládací prvky. Tím se zbavíme všech chyb v dokumentu a můžeme zkusit pustit dialog Ladění skriptů a zkontrolovat chování vypočtené položky. Při ladění skriptů vidíme, že hodnota druhého roku je rovna hodnotě prvního roku pouze v případě, že má první rok správnou hodnotu. V ostatních případech je hodnota druhé položky nedefinovaná. 3.3.8. Výběry z více možností V této kapitole ukážeme tři možná řešení dříve zmíněného problému pro výběr z možností. V základním tutoriálu jsme místo škrtání neplatných možností kroužkovali vybrané možnosti, což bylo proti instrukcím na formuláři. V první ukázce budeme pouze řešit převrácení hodnot, v dalších řešeních už zařídíme, aby měl uživatel vždy jen jedno vybírací políčko (a nemohl si tak zvolit bakalářský a magisterský program najednou. Prvním z řešení bude použití formátovacího vzoru položek pro převrácení zobrazené hodnoty. Nejprve je potřeba nastavit oblastem, aby respektovaly formátovací vzor položky. Vybereme tedy tři oblasti pro výběr studijního programu a nastavíme jim Styl oblasti na Určeno znakem. Poté všem vybraným položkám nastavíme vlastnost Textový výstup na: if (this.value()) return ' '; else return 'X'; Tím dosáhneme zobrazení prázdného pole v případě zaškrtnutí vstupního políčka a zobrazení křížku v případě, že vstupní políčko zaškrtnuto není. Více informací o stylech výběrových oblastí naleznete v kapitole „Nastavení oblasti tisku typu zaškrtávání“. Toto řešení však není elegantní, protože uživatel má stále možnost vybrat více než jeden studijní program, proto budeme dále pokračovat bez těchto změn. Nyní se zaměříme na možnost použití jedné vstupní položky bez oblasti a tří položek s vypočtenou hodnotou z této jedné. Do datového modelu přidáme novou položku pomocí tlačítka Vytvořit novou položku bez oblastí. Tu přejmenujeme na studijni_program a nastavíme jí vlastnost Vstupní položka na Ano. Poté nastavíme Výběr z možností na Ano, čímž nám přibude vlastnost Hodnoty, do které máme za úkol napsat program vracející seznam použitelných hodnot v položce. Následujícím kódem: = ["Bakalářský", "Magisterský", "Doktorský"]; 25 Návrhář formulářů nastavíme položce tyto hodnoty. Naopak položkám bakalarsky, magistersky a doktorsky nastavíme, že nejsou vstupní a jejich programy budou velmi jednoduché, pro bakalářský program konkrétně nastavíme : if (studijni_program.value() == "Bakalářský") return false; else return true; Stejně jako v minulém případě pak musíme odstranit tyto tři položky z CSV úložiště (naopak do něj přidat studijní program) a taktéž odstraníme položky z elektronického formuláře. I do elektronického formuláře přidáme (přetažením) položku studijni_program ze seznamu Ovládacích prvků. Nově vytvořený ovládací prvek je přidán s editorem pro výběr jedné z možností. Chování formuláře si můžeme ověřit v Ladění skriptů a zobrazením náhledu na data. Daný problém se dá vyřešit ještě jiným způsobem a ten dokonce využívá pouze jednu položku. Pro její základ vybereme položky prezencni, kterou přejmenujeme na forma_studia, nastavíme Typ položky na Řetězec, Výběr z možností na Ano a do programu určujícího Hodnotu dáme: = ["Prezenční", "Distanční", "Jejich kombinace"]; Poté potřebujeme přesunout další dvě oblasti z položek distancni a kombinace do této položky a tyto dvě smazat. Přesun oblastí mezi položkami lze provést v seznamu Vlastnosti položky formuláře, pokud máme vybrané všechny tři položky. V dolní části seznamu máme seznam oblastí ve vybraných položkách, z nich vybereme oblasti z rušených položek a myší je přeneseme do položky forma_studia pod oblast Oblast 1, viz 3.20 – „Přesun oblastí do jiné položky“. Obrázek 3.20. Přesun oblastí do jiné položky Poté druhé dvě položky smažeme (jejich vybráním v seznamu Položky formuláře a stisknutím klávesy DELETE). Poté nám už stačí oblastem nastavit Styl na Určeno vzorem a Textový výstup položky na program, který bude podle hodnoty vstupu nastavovat správné znaky jednotlivým oblastem, tedy: if (this.value() == "Prezenční") return " XX"; else if (this.value() == "Distanční) return "X X"; else if (this.value() == "Jejich kombinace") return "XX "; else return " "; 26 Návrhář formulářů Poznámka Na pořadí oblastí v rámci položky záleží. V tomto pořadí si berou znaky z textového výstupu své položky. 3.3.9. Statické oblasti V některých případech je jasné, že některé kolonky mají nabývat stejné hodnoty za všech okolností. Například kdybychom byli na studijním oddělení Matematicko-fyzikální fakulty Univerity Karlovy, tak by pro nás bylo zbytečné neustále vyplňovat první dvě kolonky, Vysoká škola a Fakulta. Proto je možné přidávat takzvané statické oblasti. Ty se od normálních oblastí liší tím, že si svou hodnotu pamatují přímo ve svých vlastnostech (standardní tiskové oblasti si pouze pamatují způsob, jak svou hodnotu získat z jejich položky). Statickou oblast můžeme vytvořit přetažením jednoho ze základních typů oblastí označeného Statický ... na formulář, nebo nastavením vlastnosti Statická na Ano u existující oblasti. Pro položky vlastnící jenom statické oblasti se hodí Typ Prázdná, protože ji nikdy nechceme nechat uživatelem vyplňovat. Všechny statické oblasti formuláře je možné seskupit do jediné položky (první vyrobíme normálně a před nakreslením další statické oblasti odškrtneme volbu Pokaždé vytvářet nové položky). Tip Pomocí statických oblastí je taktéž možné navrhnout celý vzhled papírového formuláře v případě, že nemáte jeho obrázkový podklad. 3.3.10. Knihovní funkce Při psaní skriptů je možné používat funkce definované v předdefinovaných systémových balíčkách, prozatím je v systému pouze jeden, a to number_utils.js, jehož obsah můžete nalézt v instalačním adresáři aplikace ve složce sample/packages/. Tento balíček obsahuje mimo jiné i funkci pro převod číselné hodnoty na řetězec, kterou použijeme pro vypsání údaje stipendium. Pro použití balíčku jej musíme nejprve načíst, to se provádí v nástroji Ladění skriptů, kde na začátek 4 kódu napíšeme : import Utils; import Numbers; Položka stipendium je vstupní, proto jí potřebujeme nastavit Textový výstup na program, který bude převádět číslo (které má položka na vstupu) na textovou hodnotu. S pomocí knihovní funkce Numbers.toName() je kód velmi jednoduchý: = Numbers.toName(this.value()); Kompletní seznam všech knihovních funkcí je možné nalézt v 3.5.5 – „Seznam knihovních funkcí“ 3.3.11. Uživatelské fuknce Uživatelé mají možnost si definovat svoje vlastní funkce na globální úrovni v 3.3.5 – „Ladění skriptů“. Takovouto funkci je možné definovat následujícím způsobem: 4 Při vytvoření prázdného dokumentu se první uvedený řádek vkládá vždy. 27 Návrhář formulářů function text_concat(controls, separator) { var result = ""; if (separator == undefined) separator = " "; for (var i in controls) { result += controls[i].value() + separator; } return result; } V programech položek lze poté takto definovanou funkci zavolat stejně jako kteroukoli jinou funkci JavaScriptu, stačí zadat její jméno a do závorek parametry. Naši funkci pro konkatenaci řetězcových hodnot předaných položek použijeme například takto: vsichni_zamestnanci.value = text_concat(skupina_zamestnancu.controls(), ", "); Tímto kódem docílíme toho, že položka vsichni_zamestnanci bude nabývat textu odpovídajícímu spojení hodnot všech položek ze skupiny skupina_zamestnancu pomocí oddělovače ", ". 3.3.12. Organizace položek do skupin V seznamu Položky formuláře je možné vytvořené položky rozdělovat do skupin, aby se v nich dalo lépe vyznat. Tím vznikne hierarchie položek a skupin, která nám kromě lepšího přehledu mezi položkami umožní například i iterací přes všechny položky ve skupině. Novou skupinu v seznamu vytvoříme stiskem ikonky Vytvořit novou skupinu položek v záhlaví tohoto seznamu nebo v jeho kontextovém menu. Tím nám vznikne nová skupina. Nově vytvořená položka je vždy umístěna do aktuálně vybrané skupiny (popřípadě skupiny aktuální položky), které jsou v seznamu zvýrazněny tučně. Označené existující položky můžeme v seznamu přesunout přetažením myší do jiné skupiny. Přenášené položky lze pustit nad názvem skupiny, popřípadě mezi libovolnými dvěma jejími prvky. V kapitole 3.3.5 – „Ladění skriptů“ jsme se zmínili o tom, že ve všech programech jsou položky přístupné pouze plnými hierarchickými jmény. Tím pádem je nutné při přesunu položky do skupiny, přejmenování položky nebo některé z jejích nadskupin upravit všechny programy, které se na ní odkazují. Toto naštěstí nemusí dělat uživatel sám, v aplikaci funguje automatický refactoring kódu pouštěný vždy když může dojít k zneplatnění některého programu. Refactoring je možné vypnout v nastavení aplikace v záložce Základní nastavení, potom je potřeba upravit programy ručně, což lze nejlépe provést v 3.3.5 – „Ladění skriptů“ v JavaScriptovém editoru pomocí funkce nahrazení textu (CTRL+H). 3.3.13. Rozložení elektronického formuláře V kapitole 3.2.3 – „Elektronický formulář“ jsme si ve zkratce představili, jak jednoduše navrhnout rozložení elektronického formuláře. V této kapitole se podíváme, jak se dá s tabulkou ovládacích prvků pracovat a jak navrhnout formulář podobný tomu papírovému. Po vytvoření vzhledu papírového formuláře (přidání všech možných položek) vidíme všechny vstupní položky v levém sloupci. Naším cílem je všechny tyto položky přetáhnout na elektronický formulář (kde z každé položky vznikne ovládací prvek a jeho popisek) a uspořádat je tam tak, aby se v takovýto formulář uživateli jednoduše vyplňoval. Tabulka, kde vzhled formuláře vytváříme, je rozdělena na jednotlivá políčka. Všechna políčka v jednom řádku mají vždy stejnou výšku, stejně tak jako políčka v jedno sloupci mají stejnou šířku. Šířky sloupců a výšky řádků můžeme jednoduše upravovat v jejich záhlaví (posunutím rozdělovací čáry). V tabulce je možné vytvářet větší pole obdélníkových tvarů pomocí spojování jednotlivých políček. Do každého takového pole pak můžeme umístit jeden ovládací prvek. 28 Návrhář formulářů V tabulce se dá pracovat s výběrem polí, který má vždy obdélníkový tvar a je zobrazen modrou barvou, viz 3.21 – „Uspořádání polí v tabulce pro návrh elektronického formuláře“. Vybrané pole jsou na obrázku zvýrazněna modře, ovládací prvky mají žluté pozadí, popisky pak světle šedé. Bílé jsou prázdné buňky. Obrázek 3.21. Uspořádání polí v tabulce pro návrh elektronického formuláře Výběr lze vyrobit tažením myši přes všechna pole, která mají být vybrána, pokud první pole výběru obsahuje nějaký ovládací prvek, pak musíte před začátkem výběru držet klávesu CTRL. Prosté tažení myši, které začíná nad ovládacím prvkem je bráno jako jeho přesun. Takovýto výběr je možné přenést na novou pozici (vložit do stejně velkého — co do počtu polí — obdélníku někde jinde), či jej vložit mezi existující řádky. Ve výběrů může být libovolný počet ovládacích prvků. Celý výběr můžeme taktéž smazat z kontextového menu vyvolaného nad jedním z vybraných polí, což vede k navrácení všech ovládacích prvků z výběru do seznamu Ovládací prvky. Přes kontextové menu se dají slučovat a rozdělovat buňky výběru. Dvojklikem na ovládací prvek (nebo jeho popisek) dojde k zvýraznění obou částí prvku v tabulce a jeho vlastnosti se zobrazí v seznamu Vlastnosti položek formuláře . V tomto seznamu pak lze měnit text popisku a typ zobrazeného ovládacího prvku. Spojováním políček do větších polí, přesouváním skupin ovládacích prvků a nastavením jim správných popisků můžeme dosáhnout hezkého a uživatelsky přívětivého vzhledu formuláře. Návrhář formulářů však nabízí ještě jednu možnost a to automatické vyrobení rozložení ovládacích prvků na elektronickém formuláři v závislosti na rozložení oblastí vstupních položek na papírovém formuláři. Tento proces je možné spustit klepnutím na ikonu Vytvořit layout podle skenu ve chvíli, kdy v tabulce není žádný ovládací prvek. Výše popsanými způsoby lze potom formulář doupravit. 3.3.14. Podpora ukládání dat v databázi Data z formulářů lze kromě standardního textového formátu CSV ukládat taktéž do databáze. Pro přidání definice databázového úložiště do formuláře budeme postupovat velmi podobně jako při přidávání CSV úložiště popsaného v kapitole 3.2.4 – „Úložiště dat“. Po vytvoření úložiště s typem databáze přibyde do formuláře další záložka, kde je možné upravit nastavení databázové tabulky, do které mají být data ukládána. Po přidání všech vstupních položek do úložiště vypadá formulář jako na obrázku 3.22 – „Nastavení databázového úložiště formuláře“. 29 Návrhář formulářů Obrázek 3.22. Nastavení databázového úložiště formuláře V současné verzi aplikace je ukládání možné pouze do jediné tabulky a podporovány jsou pouze databáze typu SQLITE, které nepotřebují žádný speciální ovladač ani externí hostitelskou aplikaci a fungují na každém počítači. Nastavení databáze, zejména Jméno tabulky a Název primárního klíče, je možné editovat v seznamu Vlastnosti kontejneru. Jména sloupců tabulky přiřazené k jednotlivým položkám formuláře poté ve střední části okna. Po úspěšném vytvoření definice databázové tabulky je možné formulář uložit a vyexportovat pro Vyplňovač formulářů. Při exportu do projektu přidáme jedno úložiště pro nově vytvořenou definici databázového úložiště, v kolonce Název zvolíme interní název a do kolonky Absolutní cesta zadáme cestu 5 k souboru, ve kterém chceme databázi uchovávat . Po potvrzení exportu projektu je vytvořen, pokud neexistoval, a zinicializován databázový soubor. 5 SQLITE databáze nejsou nic jiného, než obyčejné datové soubory, které podporují ukládání více tabulek. Každý soubor pak představuje jednu databázi. 30 Návrhář formulářů Obrázek 3.23. Export projektu s databázovým úložištěm Ve Vyplňovači formulářů se poté s databázovým úložištěm pracuje úplně stejně jako s CSV úložištěm. Do tabulky se dají přidávat nové záznamy, stávající upravovat popřípadě mazat. Nakonec je důležité všechny provedené změny potvrdit uložením. 3.3.15. Formát dat v úložišti a elektronickém formuláři V některých případech můžeme chtít některé hodnoty (datumy, Ano/Ne, reálná čísla) do úložiště ukládat v jiném formátu, než je poté prezentujeme uživateli. K ovlivnění ukládání slouží vlastnosti zobrazené v seznamech Vlastnosti kontejneru v každé z definic úložiště nebo elektronického formuláře. Tato nastavení je možné vidět na obrázku 3.24 – „Nastavení formátu ukládaných dat“. Obrázek 3.24. Nastavení formátu ukládaných dat Každé z těchto nastavení ovlivňuje způsob, jakým bude ukládán (nebo zobrazován) určitý datový typ v celém úložišti (nebo elektronickém formuláři). Každá z položek, která jsou typu vyžadujícího nastavení formátu, si pro sebe může nastavit formát vlastní. Ten pak bude použit při ukládání této položky místo výchozího. Specifické formáty jednotlivých položek se dají nastavovat v seznamu Vlastnosti položek formuláře, kde je vždy zobrazen jenom formát pro daný typ položky, pokud tuto vlastnost ponecháte prázdnou, bude použit globální (kontejnerový) formát. 3.4. Další činnosti s formulářem V této kapitole si popíšeme další netriviální akce, které je možné provádět s formulářem v aplikaci Návrhář formulářů. 31 Návrhář formulářů 3.4.1. Nastavení dokumentu V menu Formulář se nachází akce pro práci s formulářem, jako je přidávání nových stránek, přidávání nových datových úložišť nebo definic elektronických formulářů. Pomocí volby Nastavení dokumentu se otevře dialog 3.25 – „Nastavení tisku formulářů“ pro změnu globálních nastavení formuláře a jeho stránek. Obrázek 3.25. Nastavení tisku formulářů Stránky je možné v jejich seznamu přesouvat (buďto tažením myši nebo přes kontextové menu), popřípadě úplně mazat z formuláře. Dvojitým poklepáním na obrazovku vstoupí uživatel do editačního módu a může upravit velikost stránky. Změna velikosti stránky nijak nemění nastavení jejího obrázku. Změna velikosti obrázku na pozadí stránky a jeho posun jsou popsány v kapitole 3.4.3 – „Kalibrace pozadí stránky“. Časový limit skriptů ovlivňuje maximální povolenou dobu pro vyhodnocování všech programů formuláře. Pokud trvá vyhodnocení déle, je skript ukončen a ne všechna data jsou dopočítána. Standardní velikost stránky určuje velikost stránek přidávaných do formuláře v mm. Jazykové nastavení slouží jako výchozí nastavení pro formátování výstupních vzorů (datumů, čísel) ve formuláři při jeho tisku. 3.4.2. Doplnění detekovaných oblastí Při přidávání stránky (3.2.1 – „Vytvoření formuláře“) a následné detekci oblastí se může stát, že nebudou nalezeny všechny oblasti. V tuto chvíli se nám hodí spustit detekci oblastí pouze na malé části obrázku. K tomuto účelu slouží nástroj Úpravy → Nástroje → Dodetekovat další oblasti , jehož spuštění nám zakáže práci na všech ostatních stránkách a na aktuální mám vysvítí oblast, ve které má být provedena detekce. Zároveň se nám zobrazí okno pro nastavení detekce, ve kterém jsou stejné možnosti jako při běžné detekci popsané v kapitole 6 – „Detektor oblastí a rotace“. Aplikace v tuto chvíli vypadá jako na obrázku 3.26 – „Náhled na vzorová data vyplněná v potvrzení o studiu“. 32 Návrhář formulářů Obrázek 3.26. Náhled na vzorová data vyplněná v potvrzení o studiu Světle zvýrazněnou oblastí, kde má být provedena detekce, lze pohybovat chycením za nezvýrazněnou oblast, Velikost zvýrazněné oblasti lze měnit po najetí myší nad jeden z jejích rohů. Náhled detekce je možné zobrazit zaškrtnutím možnosti Zobrazit náhled detekce. Detekce oblastí se provede stisknutím tlačítka Detekovat, které nejprve odstraní všechny staré detekované oblasti uvnitř zvýrazněného obdélníku, pokud je příslušné škrtátko zaškrtnuté, a poté zobrazí nově nalezené oblasti. Pokud se vám detekce nelíbí, můžete ji opakovat nebo vrátit změny zpět. Do standardního módu aplikace se dostanete kliknutím na tlačítko Dokončit. Nově nalezené detekované oblasti je možné převést na tiskové oblasti jedním ze způsobů popsaných v 3.2.2 – „Tvorba formulářových polí“. 3.4.3. Kalibrace pozadí stránky Po přidání obrázku formuláře na pozadí stránky je potřeba jej ještě zkalibrovat, to znamená nastavit mu správnou velikost a pozici v rámci stránky, aby se vyplněné hodnoty tiskly do formuláře na správná místa. Velikost obrázku se aplikace snaží zjistit z rozlišení obrázku a při přidávání stránky a provedení prvotní detekce oblastí se dá nastavit pomocí kalibrační čáry. Ne vždy se toto však povede provést přesně hned napoprvé. K opravě velikosti a určení pozice obrázku na stránce je proto v aplikaci nástroj spustitelný přes Úpravy → Nástroje → Kalibrace velikosti a pozice pozadí stránky . Toto na aktuální stránce schová všechny aktuální oblasti a zobrazí pouze obrázek na pozadí, pravítko a kalibrační čáru, viz 3.27 – „Nástroj kalibrace velikosti a pozice pozadí stránky“. 33 Návrhář formulářů Obrázek 3.27. Nástroj kalibrace velikosti a pozice pozadí stránky Velikost obrázku lze nejlépe nastavit tak, že kalibrační čáru umístíte do dlouhého políčka (mezi dva významné body na obrázku), poté změříte mezi těmito body vzdálenost v milimetrech na skutečném papírovém formuláři a v okně Kalibrace pozadí stránky nastavíte hodnotu pole Délka čáry na změřenou vzdálenost. V tu chvíli se zobrazí přepočítané pravítko, změnu velikosti obrázku je pak nutné potvrdit stiskem tlačítka Překalibrovat, čímž bude fyzicky změněna velikost obrázku (a ne jenom měřítka stránky). Umístění obrázku v rámci stránky se dá měnit jeho chycením myší přenesením na jinou pozici. K určování přesné pozice kurzoru myši slouží dvě červené čárky na pravítku a také hodnota Pozice vypsaná na stavové liště programu. Nejpřesnějším způsobem umístění obrázku je změření pozice nějakého výrazného bodu na reálném papírovém formuláři, poté už stačí obrázek chytnout za tento bod a přenést na jeho správnou pozici. Poznámka Pozici obrázku na stránce nastavujte až ve chvíli, kdy máte správně nastavenu velikost obrázku. Pozici a velikost obrázku na stránce lze taktéž měnit v seznamu Vlastnosti oblasti tisku, položka Velikost stránky tu má jen informativní charakter, nelze ji měnit. Změna velikosti stránky je možná v 3.4.1 – „Nastavení dokumentu“. Tlačítkem Dokončit uložíme nastavenou kalibraci, dojde tím k přepočtení pozice a velikosti všech oblastí na stránce, aby zůstaly na stejných místech na obrázku. Tlačítkem Zrušit se zahodí všechny provedené změny. Poznámka Během kalibrace pozadí není možné vracet změny zpět, pokud se vám něco nepovedlo, stačí vyskočit z kalibračního módu a zase se do něj vrátit. Po dokončení kalibrace ji však už lze celou vrátit zpět. 34 Návrhář formulářů 3.4.4. Znovuprovedení celé detekce V kontextovém menu stránky (vyvolaném po zmáčknutí pravého tlačítka myši) naleznete možnost Provést celou detekci znovu, která na dané stránce znovu spustí dialog pro detekci oblastí na stránce. Toto se hodí, pokud jste obrázek na pozadí načetli přímo ze souboru a pak jste zjistili, že je trochu natočený, popřípadě pokud chcete celou kalibraci a detekci provést znova. V dialogu pro detekci oblastí na stránce 3.2 – „Dialog pro přidání stránky a detekci oblastí“ potom můžete obrázek nechat natočit, překalibrovat a nechat nalézt oblasti. Po potvrzení stiskem tlačítka OK budou odstraněny všechny předešlé detekované oblasti ze stránky, přidají se na ní ty nové a u tiskových oblastí bude přepočtena jejich pozice. Varování Otočením obrázku tímto způsobem může dojít k nesprávnému posunu existujících tiskových oblastí. Pokud v dialogu vyberete nový obrázek nebo stávající oříznete, pak dojde k posunu oblastí zcela určitě a budete je muset později ručně narovnat na správná místa. Kompletní překalibrování stránky doporučujeme provádět pouze na stránce bez tiskových oblastí, v jiných případech používejte nástroje pro kalibraci nebo dodatečnou detekci popsané v předcházejících kapitolách. 3.4.5. Převod všech detekovaných oblastí na položky V případě, že máte na formuláři příliš mnoho detekovaných oblastí a chcete je všechny převést na formulářové položky a jejich tiskové oblasti, můžete využít dialogu vyvolaného ikonkou Převést všechny zdetekované oblasti z nástrojové lišty aplikace nebo z kontextového menu stránky, na které jsou nějaké detekované oblasti. V dialogu 3.28 – „Dialog pro převod detekovaných oblastí na položky formuláře“ stačí vybrat jméno položky, znak %1 bude nahrazen indexem vytvořené položky. Indexy budou začínat na hodnotě zadané v políčku Číslo. Ze seznamu Typ vytvářených oblastí vyberte požadovaný typ všech vyráběných položek. Automatický výběr se řídí podle informací získaných z detekce oblastí. Obrázek 3.28. Dialog pro převod detekovaných oblastí na položky formuláře Převod oblastí je spuštěn po stisku tlačítka OK a v závislosti na počtu oblastí může trvat i několik sekund. 3.5. Manuál V této kapitole naleznete podrobný popis položek formuláře a jejich vlastností, dále pak popis vlastností tiskových oblastí a postup vyhodnocování programů položek pro lepší pochopení funkce aplikace. Dále podrobný popis formátovacích vzorů a v závěru je pak přehled knihovních funkcí, které lze importovat a používat v programech. 35 Návrhář formulářů 3.5.1. Položka formuláře Položka formuláře je zřejmě nejdůležitější prvek při návrhu elektronického formuláře. Odpovídá jednomu textovému poli na papírovém formuláři. To znamená, že vše, co lze ve formuláři vyplnit by měla reprezentovat nějaká položka formuláře. Pokud je na formuláři pole rozděleno na několik dalších, ale přesto reprezentují jeden údaj, pak i tomu odpovídá jedna položka a skutečnost, že její výstup je v několika různých polích se řeší pomocí oblastí tisku. Typickým příkladem jsou různé formuláře, kde se např. vyplňuje rodné číslo. Ačkoliv je číslo pouze jedno, zapisuje se do několika různých (zpravidla vedle sebe umístěných) textových polí. Aby bylo vyplňování elektronické podoby formuláře co nejpohodlnější, obsahuje každá položka mnoho různých nastavení, které umí ovlivňovat její chování. Nejdůležitější nastavení je to, zda položku vyplňuje přímo uživatel, nebo se její hodnota počítá automaticky na základě jiných položek. Pokud se hodnota počítá automaticky, je možné zadat program, který její hodnotu spočítá. Proto je nutné aby každá položka měla unikátní identifikátor, pomocí kterého je možné se odkazovat na jeho hodnotu z jiných položek. Nastavení je celá řada, ale některé závisí na tom, zda je je položka vstupní nebo se její hodnota počítá automaticky. Vlastnosti společné pro oba typy jsou vidět na obrázku 3.29 – „Společná nastavení položky formuláře.“. Obrázek 3.29. Společná nastavení položky formuláře. Identifikátor Řetězec, který jednoznačně identifikuje položku v rámci jeho skupiny. Identifikátor musí být platný jako identifikátor v jazyce JavaScript, navíc je zakázáno, aby identifikátor začínal nebo končil znakem _ nebo uvnitř obsahoval dva znaky __ vedle sebe. Typ položky Zde je možné vybrat jakého typu je údaj, který položka reprezentuje. Podporované typy jsou tyto: Prázdný Položka s prázdným typem nenese žádnou hodnotu. Takže jí nemůže zadat uživatel a ani nelze spočítat z jiných položek. Taková položka je vhodná použít jako schránka pro statické tiskové oblasti. Položka není nijak přístupná z programů pro výpočet hodnot. Celé číslo Položka obsahuje celé číslo. Řetězec Položka obsahuje textový řetězec. Ano/Ne Položka obsahuje buď logickou hodnotu ano nebo logickou hodnotu ne. Reálné číslo Položka obsahuje reálné číslo. Datum Položka obsahuje datum. Tento typ je mapovaný na objekt Date v JavaScriptu, ve kterém je čas nastaven na 00:00. Čas Položka obsahuje čas. Tento typ je mapovaný na objekt Date v JavaScriptu. Ve kterém je datum nastavené na 1. ledna 1970. 36 Návrhář formulářů Datum a čas Položka obsahuje datum i čas. Tento typ je mapovaný na objekt Date v JavaScriptu. Měna Položka obsahuje reálné číslo. Ve formátovacím vzoru je možné vypisovat měnu atd. Procenta Položka obsahuje procenta. Hodnota je zadávána uživatelem přímo v procentech, pokud je ale hodnota čtena během výpočtů, je vrácena hodnota 100x menší, takže je možné tímto číslem rovnou násobit. Pokud je hodnota položky počítána automaticky, je výsledná hodnota při zobrazení násobena 100, takže se zobrazuje opět v procentech. Vstupní položka Vstupní položka je taková, do které může uživatel zadávat vstup. Hodnota položka, která není vstupní se počítá automaticky pomocí programu, který musí být v tomto případě vždy zadaný. Podle této volby se zpřístupní další možná nastavení. Textový výstup Zde se zadává program, který určuje, jakým způsobem se má převést hodnota položky na text, který se bude tisknout do papírového formuláře. V tomto programu je možné odkazovat se na svoji vlastní hodnotu i na hodnoty ostatních položek. Zároveň má každá položka metodu format, pomocí které je možné velmi detailně popsat výsledný textový tvar hodnoty položky. Více o této metodě lze nalézt v kapitole 3.18 – „Návrhář formátovacích vzorů“. Program by měl vracet textový řetězec. Pokud není zadán žádný program, je implicitně použito = this.format("{value}"); Validita Zde je možné zadat program, který ověří, zda je zadaná nebo spočítaná hodnota validní. V tomto programu je možné se odkazovat na svojí hodnotu pomocí metody this.value() i na hodnoty ostatních položek. Program by měl vracet buď true nebo false podle toho, zda je položka v pořádku nebo ne, případně neprázdný řetězec, který může být zobrazen uživateli a který informuje o příčině chyby. Dostupnost dalších nastavení závisí na tom, zda je položka vstupní nebo je její hodnota počítána automaticky. Pokud je položka vstupní jsou navíc dostupné položky tak, jak je zobrazeno na obrázku 3.30 – „Nastavení vstupní položky“ Obrázek 3.30. Nastavení vstupní položky Výběr z možností Tato volba určuje, jestli vstup může obsahovat pouze určitou množinu hodnot. V takové situaci je lepší zobrazit např. rozbalovací seznam a v něm výčet těchto hodnot. Pokud položka může obsahovat pouze výčet hodnot, je logicky znepřístupněná možnost nastavit program pro kontrolu validity. Dostupnost Zde je možné zadat program, který určuje, zda je položka přístupná k vyplnění uživatelem nebo ne. Toto nastavení má význam např. když po vyplnění nějaké hodnoty ztratí význam vyplňování nějaké jiné. Např. pokud uživatel zaškrtne, že je muž, nemá význam, aby mohl vyplnit položku rodné příjmení. Program by měl vracet pouze hodnoty true nebo false. 37 Návrhář formulářů Implicitní hodnota Zde je možné vyplnit program, který vrátí hodnotu, která má být čtena v případě, že položka není vyplněna. Tímto způsobem je možné řešit např. situaci, kdy se počítá součet hodnot v deseti položkách, ale přitom není nutné všechny vyplňovat. Přesto by se součet měl spočítat korektně. Řešením je nastavit těmto položkám implicitní hodnotu na = 0; Implicitní hodnoty se netisknou a ani je nelze přečíst metodou value v programu pro textový výstup. Program by měl vracet hodnotu, která svým typem odpovídá typu položky. Výchozí hodnota Program pro výchozí hodnotu určuje, jakou hodnotu bude mít položka při vyplňování nového prázdného formuláře. Toho lze dobře využít např. tehdy, když má položka obsahovat aktuální datum. Pokud nechceme uživatele nutit, aby tuto položku musel stále vyplňovat, je možné nastavit program na = new Date(); Hodnoty Pokud položka může obsahovat pouze určitou množinu hodnot, pak je toto nastavení dostupné. Měl by zde být program, který vrací pole s přístupnými hodnotami. Hodnoty by měly být stejného typu jako je typ položky. Pokud má položka hodnotu počítanou pomocí programu, má oproti společným nastavením dostupné navíc jediné nastavení. Obrázek 3.31. Nastavení počítané položky Hodnota položky Zde musí být uvedený program, který spočítá hodnotu položky na základě hodnot jiných položek. Vrácená hodnota musí mít stejný typ jako typ položky. 3.5.2. Oblast tisku Oblast tisku odpovídá místu na formuláři, kde se má tisknout textový nebo čárový výstup. Každá položka formuláře může obsahovat libovolný počet oblastí tisku. Tyto oblasti se pak starají o grafický výstup položky. Před tiskem jsou vždy vyhodnoceny formátovací vzory položek formuláře a tak je získán jejich textový výstup. Tento textový výstup se pak distribuuje jednotlivým oblastem. Každá oblast si z výstupu může převzít ke zpracování určitou část a poslat nezpracovaný zbytek zbývajícím oblastem. Takto je možné snadno vyplňovat např. formuláře, kde se text zadává po znacích. Každému políčku odpovídá jedna oblast a každá z oblastí si vezme ke zpracování jeden znak. Nebo pokud je nějaká položka na formuláři rozdělená na více stránek, je možné udělat pro každou stránku vyrobit jednu oblast a nastavit jejich chování tak, aby se obsah, který se nevešel na první stránku, poslal do oblasti na další stránce atd. Nastavení oblasti tisku Každá tisknutelná oblast má několik nastavení. Bez ohledu na typ, má každá oblast první tři nastavení dostupná. Obrázek 3.32. Společná nastavení tiskových oblastí 38 Návrhář formulářů Pozice Toto nastavení určuje pozici oblasti na papírové předloze. Zadává se pozice levého horního rohu a její velikost v milimetrech. Statická Statická oblast nezpracovává obsah, který dostane od formulářové položky, ale má svůj předdefinovaný obsah. Tento obsah je možné zadat rovnou v editoru. Tento typ oblasti se hodí v případě, že se má na určitém místě vždy vytisknout zadaný text případně grafický útvar. Typ oblasti Toto nastavení určuje, zda bude výstupem oblasti text nebo grafický útvar jako křížek, čára atd. Text Tento typ oblasti očekává, že od rodičovského formulářového prvku dostane textový obsah, který bude vytištěn. Pro oblast toho typu je dostupné velké množství dalších nastavení. Zaškrtávání Tento typ oblasti očekává, že rodičovský formulářový prvek je buď typu Ano/Ne nebo že tento prvek vrací textový obsah. Pokud prvek vrací textový obsah, pak z tohoto obsahu odebere jeden znak, ze kterého oblast odvodí svůj tvar. Pokud je statická oblast typu Text nebo typu Zaškrtávání a tvar má určený znakem. Pak se zpřístupní položka pro nastavení textové hodnoty. Pokud je statická oblast typu Zaškrtávání a tvar jednoznačně daný, považuje se za její hodnotu implicitně Ano. Hodnota Určuje textovou hodnotu statické oblasti. Přítomnost dalších nastavení je podmíněna tím, jakého typu daná oblast je. Nastavení oblasti tisku typu text Pokud je oblast tisku typu text, pak jsou dostupná další nastavení tak, jak je zobrazuje obrázek 3.33 – „Nastavení oblasti typu text“. Obrázek 3.33. Nastavení oblasti typu text Písmo Toto nastavení určuje jakým fontem a jakou velikostí písma bude textový výstup vytištěn. Velikost písma je zobrazována rovněž v milimetrech. Víceřádkový text Pokud je oblast víceřádková, tak pokud se textový obsah nevejde na jeden řádek, bude text zalomen a výstup bude pokračovat na dalším řádku. Počet řádků je limitován výškou oblasti. Pokud oblast více řádková není, tak se vytiskne buď první řádek obsahu nebo taková část prvního řádku, která se do oblasti vejde bez zalomení. Detailní chování ovlivňuje nastavení Přetečení. Kapacita Toto nastavení ovlivňuje jak velký kus z textového obsahu, který rodičovský formulářový prvek oblasti poskytl, oblast použije než předá dál zbytek obsahu. Povolené jsou následující hodnoty: 39 Návrhář formulářů Znaky Oblast vždy ze začátku obsahu použije zvolený počet znaků (včetně mezer atd.) Slova Oblast vždy ze začátku obsahu použije zvolený počet slov. V nastavení Oddělovač lze nastavit znak, který odděluje jednotlivá slova. Prázdná slova jsou rovněž počítána do počtu. Na výstupu jsou slova oddělená mezerou. Prázdná slova se do výstupu nezapisují. Při načtení slova je z obsahu odstraněn i oddělovač, který jej odděluje od zbytku obsahu. Řádky Oblast vždy ze začátku obsahu použije zvolený počet řádků. Prázdné řádky jsou rovněž počítány do počtu a na rozdíl od předchozí volby jsou i prázdné řádky vypsány do výstupu. Vše Oblast se pokusí použít celý obsah. Detailní chování ovlivňuje nastavení Přetečení. Oddělovač Toto nastavení určuje znak, který se má použít jako oddělovač při načítání slov. Nastavení je dostupné pouze v případě, že nastavení Kapacita je nastaveno na volbu Slova. Počet prvků Význam a dostupnost tohoto nastavení závisí na nastavení Kapacita. Pro Znaky toto nastavení určuje, kolik znaků je z předaného textu použito, pro Slova nastavení určuje, kolik slov je z textu použito, a pro Řádky určuje počet řádek. Pro Vše toto nastavení není dostupné. Horizontální zarovnání Udává horizontální zarovnání vykresleného obsahu. Možné hodnoty jsou tyto: Vertikální zarovnání Odsazení Doleva Obsah je vždy zarovnán k levému okraji. Na střed Obsah je vždy zarovnán na střed. Doprava Obsah je vždy zarovnán k pravému okraji. Do bloku Každý řádek je zarovnán tak, aby začínal u pravého okraje a končil u okraje levého. Pokud řádek obsahuje pouze jedno slovo nebo je řádek ukončen znakem konce řádku a nikoliv zalomením, pak je řádek zarovnán doleva. Tato nastavení určuje vertikální zarovnání obsahu. Možné hodnoty jsou tyto: Nahoru Obsah je vždy zarovnán k hornímu okraji. Na střed Obsah je vždy zarovnán na střed. Dolů Obsah je vždy zarovnán k dolnímu okraji. Udává, jak daleko v milimetrech je obsah od okrajů oblasti vykreslován. Toto nastavení je užitečné tehdy, když jsou pozice a velikostoblasti nastavené tak, že přesně odpovídají textovým polím na papírovém formuláři. V tuto chvíli je zpravidla nežádoucí, aby se textový obsah přesně dotýkal okrajů těchto polí. Nastavení odsazení umožňuje zaručit, že obsah bude nejméně o tuto hodnotu od okrajů vzdálen. Hodnota může být i záporná. Pak se obsah vykresluje i vně oblasti. 40 Návrhář formulářů Šířka tabulátoru Udává maximální šířku tabulátoru. Znak tabulátor je interpretovaný tak, že se nalezne nejbližší vyšší násobek šířky tabulátoru následující za posledním znakem před tabulátorem a další obsah pak pokračuje na této pozici. Toto chování umožňuje snadno zarovnávat určité texty do stejného sloupce. Jednotkou je šířka jedné mezery zvoleného fontu. Přetečení Toto nastavení ovlivňuje chování v případě, že se zpracovávaný obsah nelze zvoleným fontem vykreslit do oblasti. Nastavení může nabývat těchto hodnota: Přetéct Zpracovávaný obsah je vykreslen celý. V případě, že je oblast víceřádková, ignoruje se podle podle nastavení Vertikální zarovnání buď dolní, horní nebo dolní i horní okraj oblasti. V případě, že je oblast jednořádková, ignoruje se podle nastavení Horizontální zarovnání pravý, levý nebo pravý i levý okraj oblasti. Změnit font Velikost fontu je zmenšena tak, aby se celý zpracovávaný obsah do oblasti vešel. Font je zmenšován po 10% původní velikosti. Pokud se ani při 10% původní velikosti obsah nevejde, je zbytek poslán do další oblasti. Přebytek poslat dál Obsah, který se nevejde do oblasti, je poslán do další oblasti. Nastavení oblasti tisku typu zaškrtávání Oblast typu zaškrtávání slouží k netextovému grafickému výstupu. Hodí se u položek, kdy není třeba vyplňovat textovou hodnotu, ale stačí např. něco přeškrtnout, zakroužkovat, podtrhnout atd. Pokud je vlastnící formulářová položka typu Ano/Ne, pak je význam jasný. Zvolený útvar se buď vykreslí, nebo nevykreslí. Pokud má položka textový výstup, je chová se oblast jako textová oblast, která zpracovává jeden znak. Tento znak načte a podle jeho hodnoty vykreslí příslušný útvar. Pokud je zpracovávaný znak mezera, žádný výstup je nevykreslí. Takto může jedna položka ovládat několik zaškrtávacích oblastí najednou. Dostupná nastavení pro oblast typu typu zaškrtávání jsou zobrazena na obrázku 3.34 – „Nastavení oblsti typu zaškrtávání“ Obrázek 3.34. Nastavení oblsti typu zaškrtávání Styl oblasti Určuje tvar, který je vykreslen v případě, že má být oblast zaškrtnuta. Možné hodnoty jsou tyto: Určeno znakem V tomto případě je tvar určen prvním znakem, který rodičovský formulářový prvek oblasti předal. Každému způsobu zaškrtnutí odpovídá jeden znak. Tyto znaky jsou popsány níže. Pokud znak žádné z mož- 41 Návrhář formulářů ností neodpovídá, je oblast považována za nezaškrtnutou. Vlastnící formulářová položka musí mít v tomto případě vyplněný program pro formátovací vzor. Tloušťka čáry Zaškrtnutí Odpovídá znaku X. V oblasti je vykreslen křížek vedoucí z levého horního rohu do dolního pravého a z levého horního rohu do pravého horního. Podtržení Odpovídá znaku _. Přes dolní okraj je vykreslena vodorovná čára. Vodorovné přeškrtnutí Odpovídá znaku -. Je vykreslena vodorovná zleva doprava uprostřed oblasti. Svislé přeškrtnutí Odpovídá znaku |. Je vykreslena svislá čára shora dolů uprostřed oblasti. Šikmá čára dolů Odpovídá znaku \. Je vykreslena čára z levého horního rohu do pravého dolního. Šikmá čára nahoru Odpovídá znaku /. Je vykreslena čára z levého dolního rohu do pravého horního. Zakroužkování Odpovídá znaku O. Je vykreslena elipsa, která se dotýká všech stran oblasti. Obdélník Odpovídá znaku #. Je vykreslen obdélník se stranami na hranách oblasti. Udává šířku čáry v milimetrech s jakou je útvar vykreslen. 3.5.3. Vyhodnocování programů položek formuláře Aby uživatel mohl plně a správně využít možností, které nabízí definování vlastního chování položek formuláře, je nutné vysvětlit, jak přesně vyhodnocování programů probíhá a jaké konstrukce je možné použít. V programech by se neměly používat identifikátory, které začínají na dvě podtržítka. Veškeré pomocné funkce a proměnné, které jsou nutné pro vyhodnocování programů totiž takto začínají a kolize jmen by mohla mít nepříjemné následky. Jinak žádná jiná omezení nejsou a v programech lze použít všechny konstrukce, které povoluje jazyk JavaScript. V každém programu je možné získávat hodnoty jiných položek. Jména položek jsou hierarchická a odpovídají přesně systému skupin položek. Takže položka polozka1 ve skupině skupina1 je přístupná jako skupina1.polozka1. Každá skupina kromě kořenové má metodu controls, která vrací pole všech svých položek (kromě prázdných) a metodu groups, která vrací seznam pole všech svých podskupin. Metoda value existuje pro každou položku a vrací její hodnotu. Tato hodnota nemusí být nutně ta, kterou zadal uživatel. Pokud uživatel žádnou hodnotu nezadal může být vrácena implicitní hodnota položky. V případě položek typu procenta pak vrací hodnotu 100krát menší, než kterou uživatel zadal. Jediná možnost, jak se dostat ke skutečné hodnotě, kterou uživatel zadal je metoda this.value, která je přístupná pouze v programu pro kontrolu validity. Pokud není položka dostupná k vyplňování a existuje její implicitní hodnota, pak je tato hodnota vrácena. Pokud v této situaci implicitní hodnota neexistuje, pak se položka při čtení chová jako nevalidní. Metoda valid vrací pouze true nebo false podle toho, zda je položka validní či nikoliv. Vrácená hodnota nemusí být shodná s tím, co vrátil program pro kontrolu validity. Pokud tento program vrátil řetězec (což indikuje nevalidní položku) pak tato metoda vrací pouze false. Rovněž vrací false, pokud uživatel 42 Návrhář formulářů zadal hodnotu, kterou se nepodařilo převést na typ vyžadovaný položkou. Každá položka, která během výpočtu své hodnoty nebo validity četla hodnotu nevalidní položky je rovněž označená za nevalidní. Metoda available pak vrací, zda je položka dostupná pro vyplňování. Položky, které nejsou vstupní vždy vrací true. Metoda index je platná pro položku s výčtem povolených hodnot. Vrací index té hodnoty v seznamu povolených hodnot, která je právě zadána. Položky jsou číslovány od nuly. Pokud metoda vrací záporné číslo, není žádná platná hodnota vybrána. Pořadí vyhodnocování Důležité je rovněž pořadí, ve kterém se programy vyhodnocují. Programy se vyhodnocují vždy po položkách. Takže pokud během výpočtu je požadována hodnota jedné z metod value, valid nebo available je tato položka celá vyhodnocena a teprve poté je vrácena požadovaná hodnota. Tato skutečnost tak nepřímo zakazuje volat tyto metody na sobě při výpočtu své vlastní hodnoty. Takové volání by vedlo k chybě Cyklická závislost. Jediný program, ve kterém dává smysl číst svojí vlastní hodnotu, je program pro kontrolu validity. V něm lze vlastní hodnotu bez nebezpečí zacyklení číst již výše zmíněnou metodou this.value tyto hodnoty se ale mohou lišit, neboť tato metoda metoda vrací to, co zadal uživatel, případně implicitní hodnotu. Pokud ale program označí položku za nevalidní, pak všichni ostatní tuto hodnotu budou číst jako nevalidní. Položky se tedy vyhodnocují v tom pořadí, v jakém jsou potřebné jejich výsledky pro výpočty jiných položek. Pokud některá položka závisí na jiné a ta i třeba nepřímo závisí na té první, je detekována cyklická závislost a program dále nemá definované chování. Výpočet sice normálně skončí, ale poskytnuté výsledky nebudou logicky správné. Tato chyba, ale znamená sémantickou chybu v návrhu programu a při vyplňování dobře navrženého formuláře tato chyba nikdy nenastane. Ale i vyhodnocování programů v rámci jedné položky má pevně dané pořadí. Nejdříve se spočítá program pro výpočet implicitní hodnoty. Následně se vyhodnotí program pro výpočet dostupnosti položky. Poté je vyhodnocen program pro výpočet množiny povolených hodnot položky. Následně je spočítána hodnota položky. Pokud je položka vstupní, je provedeno čtení hodnoty ze vstupu, pokud vstupní není, vyhodnotí se program pro výpočet hodnoty. Pokud nastane chyba (např. čtení hodnoty nevalidní položky) je i tato položka označena za nevalidní. Pokud čtení hodnoty ze vstupu vrátilo prázdnou hodnotu a neexistuje implicitní hodnota položky, je rovněž označena za nevalidní. Pokud je hodnota úspěšně spočítána a hodnota je stále validní, spustí se vyhodnocení programu pro kontrolu validity. Pokud program vrátí false nebo chybovou hlášku je položka označena za nevalidní. Pokud během vyhodnocení nastane chyba, je položka rovněž označena jako nevalidní. Důležité je to, že během vyhodnocování se vytváří graf datových závislostí mezi položkami. Pokud pak dojde ke změně hodnot jedné z položek, tak jsou hodnoty všech položek, které někdy použily její hodnotu při vlastním výpočtu znovu přepočítány. Trochu bokem stojí program, který počítá textový výstup položky. Tento program se vyhodnocuje pouze jednou a to při zobrazení náhledu případně při tisku. V tomto programu je možné číst hodnoty jiných položek pomocí metody value, pro výčtové položky je možné volat metodu index. Hodnotu každé položky je možné formátovat pomocí metody format. Více o této metodě je možné zjistit v kapitole 3.5.4 – „Formátovací vzory“. Rovněž výpočet programu pro výchozí hodnotu položky se vyjímá těmto pravidlům. Tento program je totiž vyhodnocen pouze jednou a to při prvním zobrazení formuláře. Vyhodnocuje se ještě dříve, než je vytvořen objektový model položek, takže není možné volat žádnou z metod položek. 3.5.4. Formátovací vzory Form Tools nabízí poměrně bohaté možnosti, jak převádět hodnotu formulářových položek na textovou reprezentaci. V programu pro textový výstup každé položky je možné na každé položce zavolat metodu format. Ta má dva parametry, pattern a nepovinný parametr locale, který určuje pro jaké národní prostředí bude vzor vyhodnocen. Protože správné nastavení parametrů je poměrně pracné, existuje 43 Návrhář formulářů dialog Návrhář formátovacích vzorů viz 3.18 – „Návrhář formátovacích vzorů“, který odstraní nutnost znát jakékoliv konkrétní detaily a umožní nastavit parametry snadno, dle přání uživatele. Parametr locale může obsahovat buď hodnotu „default“, kdy se použije národní prostředí, které je nastavené jako implicitní pro dokument, „system“, kdy se použije systémové nastavení uživatele nebo řetězec ve tvaru „jazyk_země“, kde jazyk jsou dvě malá písmena anglické abecedy, která udávají kód jazyka podle ISO 639 (http://www.w3.org/WAI/ER/IG/ert/iso639.htm). „země“ je pak tvořena dvěma velkými znaky anglické abecedy, které udávají kód země podle ISO 3166 (http://www.iso.org/iso/ english_country_names_and_code_elements). Parametr pattern tvoří samotný zápis toho, jak má textový výstup vypadat. Jedná se o řetězec který může obsahovat podvzory je tvaru „{část[;atribut1:hodnota1;atribut2:hodnota2;...]}“. Všechno, co nepatří do podvzoru je přímo okopírováno na výstup. Podvzory jsou vyhodnoceny a jejich výsledek je vložen do textového výstupu. Pokud je nutné v textu zadat znak {, je možné před tento znak dát \. Položka „část“ v podvzoru určuje, s jakou částí hodnoty se bude pracovat. Např. datový typ datum má části „day“, „month“, „year“ atd. Atributy podvzoru pak přesně určují jakým způsobem bude vybraná část zformátovaná. Následující seznam určuje pro každý datový typ položky všechny části, které jsou pro něj použitelné. Jméno každé části, atributu i některé hodnoty mohou být zadány buď plný jménem nebo zkráceným. Proto jsou občas uvedena dvě jména. První odpovídá plnému jménu a druhé v závorce zkrácenému. Celé číslo Pro tento datový typ je přípustná pouze tato část: value v Řetězec Vrací hodnotu čísla. Pro tento datový typ je rovněž přípustná pouze jedna část: value v Vrací hodnotu řetězce. Ano/Ne Pro tento datový typ je přípustná pouze část „value“ (zkráceně „v“). Tato část by měla být doplněna minimálně o atribut styl, který udává tvar obrazce, který má být nakreslen. Reálné číslo Pro tento datový typ jsou přípustné tyto části: Datum value v Vrací hodnotu čísla. fraction f Vrací desetinnou část čísla. integer i Vrací celou část čísla. Pro tento datový typ jsou přípustné tyto části: day d Vrací číslo dne v měsíci. month m Vrací číslo měsíce. year y Vrací číslo roku. year2 y2 Vrací číslo poslední dvě číslice roku. 44 Návrhář formulářů Čas century ce Vrací první dvě číslice roku. value v Vrací řetězec, který obsahuje zformátované datum podle nastaveného národního prostředí. Detailnost lze ovlivnit atributem „ style “ a hodnotou „ short “ Pro tento datový typ jsou přípustné tyto části: hour h Vrací hodinu. minute mm Vrací minuty. second s Vrací sekundy. millisecond ms Vrací milisekundy. ampm ap Vrací řetězec podle toho, zda je čas dopoledne nebo odpoledne. Délku řetězce lze ovlivnit atributem „ style “ a hodnotou „ short “ hour-real hr Vrací počet hodin včetně minut, sekund i milisekund jako reálné číslo. minute-real mmr Vrací počet minut v hodině včetně sekund i milisekund jako reálné číslo. second-real sr Vrací počet sekund v minutě včetně milisekund jako reálné číslo. hour12 h12 Vrací hodinu jako číslo mezi 1 a 12. minute-total mmt Vrací počet minut od začátku dne. second-total st Vrací počet sekund od začátku dne. millisecond-total mst Vrací počet milisekund od začátku dne. value v Vrací řetězec, který obsahuje zformátovaný čas podle nastaveného národního prostředí. Detailnost lze ovlivnit atributem „ style “ a hodnotou „ short “ Datum a čas Pro datový typ Datum a čas jsou přípustné všechny části, které jsou přípustné pro typ Datum a typ Čas . Měna Pro tento datový typ jsou přípustné stejné části jako pro datový type Reálné číslo navíc je povolena část: currency c Procenta Vrací jméno měny. Pro tento datový typ jsou také přípustné stejné části jako pro datový type Reálné číslo ale navíc je povolena část: 45 Návrhář formulářů precent % Vrací znak % podle nastavení národního prostředí. Seznam atributů a jejich možných hodnot je zde uveden spíše pro úplnost. Lépe je použít Návrháře formátovacích vzorů, kde se vždy zobrazí seznam všech povolených atributů, jejich hodnot i náhled na výsledek. Každý atribut má svojí danou implicitní hodnotu, která se použije, pokud atribut není vůbec uveden. width w Hodnotou tohoto atributu může být libovolné kladné číslo menší než 1000000. Udává jakou minimální šířku ve znacích má mít výstup podvzoru. Pokud je délka výstupu kratší než hodnota atributu, je dorovnaná na na požadovanou délku tím, že se před řetězec vloží odpovídající počet opakování hodnoty atributu „ padding “. Implicitní hodnota atributu je 0. padding p Hodnota atributu určuje řetězec jehož opakováním se výstup zarovná na požadovanou minimální délku. Implicitní hodnotou je znak mezera. precission pr Hodnotou atributu může být celé nezáporné číslo menší než 10. Toto číslo má smysl pro reálná čísla a určuje kolik desetinných míst se má vypsat. Skutečnou podobu výstupu pak ovlivňuje i atribut „ style “, který upřesňuje, co se má stát, pokud číslo má méně než požadovaný počet desetinných míst. Dále je možné zadat hodnotu „locale“ (zkráceně „?“), kdy se použije počet míst podle nastaveného národního prostředí. Tato hodnota má smysl u měny, kdy některé měny jsou děleny na 100 a některé na 1000 dílčích jednotek. Implicitní hodnota atributu je „default“, která je rovna číslu 6. group-separator gs Hodnotou atributu je řetězec, který je vložen mezi každou trojici číslic v celé části. Je možné zadat libovolný řetězec nebo hodnotu „locale“ (zkráceně „?“), kdy se použije oddělovač podle nastaveného národního prostředí. Implicitní hodnotou je prázdný řetězec, takže žádný oddělovač použit není. decimal-separator ds Tento atribut určuje, který znak se použije jako oddělovač desetinné a celé části čísla. Opět je možné zadat libovolný řetězec nebo hodnotu „locale“ (zkráceně „?“), kdy se použije oddělovač podle nastaveného národního prostředí. Implicitní hodnotou je „locale“ tedy oddělovač podle nastaveného prostředí. style (s) Tento atribut určuje jakým stylem se hodnota části vypíše. Pro některé hodnoty samozřejmě některé styly nedávají smysl. Implicitní hodnotou atributu je „ default “ Atribut může nabývat jedné z těchto hodnot: default Vrátí normální reprezentaci hodnoty. Tj. číslo jako číslo, řetězec jako řetězec. Typy Datum, Čas a Datum a čas Pro typ Ano/Ne vrací bez ohledu na hodnotu znak mezera. all-digits ad Budou vypsána všechna desetinná místa až do zadané přesnosti. Např. číslo „1,2“ s přesnost „3“ bude vypsáno jako „1,200“ místo „1,2“. name n Hodnota bude vypsána jménem. Např. den nebude vypsán jako číslo, ale jménem dne v týdnu. short s Podobné jako atribut „ name “, jenom se použije kratší varianta jména. Např. místo „úterý“ bude vypsáno pouze „út“. 46 Návrhář formulářů roman R Číslo bude vypsáno v římské soustavě. Pokud je záporné nebo větší než 4000, je vypsáno normálně. Číslice jsou psány velkými písmeny. roman-small r Stejné jako „ roman “ s tím rozdílem, že číslice jsou psány malými znaky. ISO i Podobné jako „ roman “ jenom se použije standardizované jméno. Např. místo „Kč“ se vypíše „CZK“. circle o Vrátí znak O, pokud je hodnota rovna true. cross x Vrátí znak X, pokud je hodnota rovna true. box # Vrátí znak #, pokud je hodnota rovna true. diagonal-down \\ Vrátí znak \, pokud je hodnota rovna true. diagonal-up / Vrátí znak /, pokud je hodnota rovna true. underline _ Vrátí znak _, pokud je hodnota rovna true. dotline . Vrátí znak ., pokud je hodnota rovna true. 3.5.5. Seznam knihovních funkcí Při programování položek se občas hodí mít k dispozici předpřipravené funkce, které implementují nejčastěji prováděné operace. Tyto funkce jsou implementované v tzv. balíčcích, které je nutné nejdříve importovat a teprve poté je možné volat funkce z toho balíčku. Pro import balíčku je použito klíčové slovo import následované jménem balíčku, takže například import Utils;. Je důležité zmínit, že nejdříve musí být uvedeny všechny importy a teprve pak je možné psát samotný kód. Je dobré vědět, že import balíčku způsobí zvětšení velikosti Javascriptového kódu při exportu do HTML nebo PHP. Proto není rozumné importovat balíčky, jejichž funkce se nepoužívají. Utils Tento balíček obsahuje nejčastější funkce a při vytvoření nového dokumentu je tento balíček automaticky importován. V tomto balíčku se nacházejí následující funkce: Utils.sum(controls) Tato funkce očekává jako parametr pole položek a vrátí součet jejich hodnot. Pokud je tedy potřeba sečíst např. všechny hodnoty v nějaké skupině, je možné napsat = Utils.sum(skupina.controls()); Utils.avg(controls) Tato funkce se chová stejně jako Utils.sum(controls) s tím rozdílem, že výsledek je vydělen počtem vstupním položek. Utils.notEmpty(string [, message]) Tato funkce otestuje, zda není vstupní řetězec prázdný a pokud ano vrátí hodnotu řetězce message. Pokud tento parametr není zadaný, vrátí se řetězec „Hodnota nesmí být prázdná“. 47 Návrhář formulářů Tato funkce lze šikovně použít v programu pro validaci položky. Pokud vstup nesmí být prázdný, je možné napsat = Utils.notEmpty(this.value());. Utils.mask(symbol, length, index [, padding]) Funkce vygeneruje řetězec délky length, který je vyplněn znaky padding. Na pozici index je na závěr vložen symbol symbol. Pokud parametr padding není zadaný, použije se mezera. Tato funkce je velmi vhodná při práci s oblastmi typu zaškrtávání. Pokud např. je možné zakroužkovat některou z víc možností, je možné vytvořit položku výčtového typu, do ní vložit odpovídající oblasti typu zaškrtávání jejichž tvar je určen znakem. Do programu textového výstupu se pak napíše pouze = Utils.mask("O", počet oblastí, this.index()); a vždy bude zakroužkovaná správna možnost. Numbers Tento balíček obsahuje funkce pro práci s čísly. V současnosti obsahuje jedinou funkci. Numbers.toName(number) Vrátí zadané číslo jako řetězec napsaný v aktuálním jazyku. Např. číslo 123 je vráceno jako "sto dvacet tři". Excel Tento balíček obsahuje funkce Excel.IF, Excel.AND, Excel.OR a Excel.NOT které poskytují stejnou funkčnost jako odpovídající funkce v programu Microsoft Excel™ 48 Kapitola 4. Vyplňovač formulářů Vyplňovač formulářů slouží k vyplňování formulářů vyexportovaných z aplikace Návrhář formulářů. Druhou schopností vyplňovače je správa pořízených dat, jejich úpravy a tisk. 4.1. Otevření projektu ve Vyplňovači formulářů Práci s aplikací si ukážeme v krátkém tutoriálu. Budeme pracovat na jednoduchém formuláři pro potvrzení o studiu, který jsme si vytvořili v kapitole 3.2 – „Tutoriál“ v nápovědě k aplikaci Návrhář formulářů. Pokud nechcete procházet tímto průvodcem, naleznete připravený projekt pro Vyplňovač formulářů v instalační složce aplikace v adresáři sample/potvrzeni-simple/. Pokud používáte operační systém MS Windows, můžete formulář k vyplňování (soubor sample/potvrzeni-simple/potvrzeni_simple.fts) otevřít prostým spuštěním. V ostatních případech spusťte program Filler a v něm zvolte Soubor → → Otevřít a poté nalistujte výše zmíněný soubor. 4.2. Vyplňování dat Po otevření formuláře se zinicializuje hlavní okno aplikace, které je rozděleno na dvě části, jak ukazuje 4.1 – „Prázdný formulář potvrzení o studiu ve Vyplňovači formulářů“. Obrázek 4.1. Prázdný formulář potvrzení o studiu ve Vyplňovači formulářů V horní části aplikace je dokovací (přesouvací) okénko zobrazující elektronickou podobu formuláře, jak jsme ji nadefinovali v kroku 3.2.3 – „Elektronický formulář“. Ve spodní části jsou záložky s jednotlivými 49 Vyplňovač formulářů datovými úložišti otevřeného formuláře (my jsme při exportu formuláře vytvořili pouze jedno). Každý zdroj dat je reprezentovaný tabulkou, kde v každém řádku jsou data z jednoho formuláře (v našem případě údaje o jednom studentovi). Formulář můžeme vyplňovat dvěma způsoby, jednak přímo v tabulce, druhak v části Formulář. Tabulka vždy zobrazuje o jeden řádek více, než kolik je dat v systému, pro jejich lehčí přidávání. Na začátku tedy máme k dispozici jeden řádek. Dvojklikem myši do kteréhokoli políčka se dostaneme do editačního módu a můžeme začít vyplňovat data pro položku v daném sloupci. My začneme hned tím prvním, políčkem Vysoká škola, do kterého vyplníme název školy, například Univerzita Karlova. Pomocí klávesy TAB se dostaneme do dalšího políčka, Fakulta. Tím nám v datech vznikl nový záznam, přibyl jeden prázdný řádek (pro přidání dalšího studenta) a my jsme stále v editačním módu. Můžeme tedy rovnou zadat Matematicko-fyzikální fakulta. Hodnotu můžeme potvrdit klávesou ENTER, tím se dostaneme zpět do prohlížecího módu. Po tabulce se můžeme pohybovat kurzorovými šipkami, klávesou -> (šipka vpravo) tedy přejdeme do kolonky Obor. I když nejsme v editačním módu, můžeme hned začít psát, první napsané písmenko (I) nás přepne do editace aktuálního políčka, kam doplníme zbytek slova, tedy informatika. Tímto se při práci v tabulce kompletně obejdeme bez myši. Prvním problematickým políčkem pravděpodobně bude pole Bakalářský, protože to je typu Ano/Ne a na jeho editaci je v tabulce použito zaškrtávací políčko. V tomto případě se do editačního módu dostaneme libovolným písmenkem a stav zaškrtávacího pole měníme pomocí klávesy MEZERA. Poznámka Pole zvýrazněná v tabulce červeným pozadím symbolizují nevalidní (špatně zadanou) hodnotu. Těmto polím je nutné věnovat zvýšenou pozornost a opravit je. Špatně zadaná data totiž není možné tisknout. Druhým způsobem editace záznamů je vyplňování elektronického formuláře v části označené Formulář. Nejprve je však nutné do tohoto formuláře vybrat nějaká data z výše popsané tabulky. To lze provést jednoduše dvojkliknutím na číslo řádku (nejlevější sloupec tabulky). My tedy dvakrát klikneme na číslo 2 ve druhém řádku tabulky a tím se nám otevřou druhá (zatím prázdná) data pro editaci ve formuláři. Ta můžeme vyplňovat úplně stejně, jako v tabulce. Mezi jednotlivými poli přeskakujeme pomocí kláves ENTER nebo TAB. Kombinace kláves CTRL+ENTER načte do formuláře další data a zůstane v editaci stejného políčka. Poznámka I v elektronickém formuláři je možné využít klávesy TAB pro přesun do následujícího pole stejných dat, kombinace SHIFT+TAB přesouvá na předcházející pole formuláře. Těmito dvěma způsoby můžeme pořídit velice lehce data pro náš formulář. Po editaci (a i v průběhu ní) je důležité pořízené údaje uložit do souboru. To lze provést kliknutím na ikonku Soubor → Uložit , popřípadě použitím klávesové zkratky CTRL+S. Všechny prováděné změny je možné vrátit zpět pomocí klávesové zkratky CTRL+Z, naopak k obnovení naposledy vrácené změny slouží kombinace kláves CTRL+Y, popřípadě lze využít ikonek v menu Úpravy. Nyní, když už umíme vyplňovat data do formuláře, si pořídíme údaje o dalším (alespoň jednom) studentovi. Poté vytvořená data uložíme do datových úložišť pomocí tlačítka Uložit. 4.3. Náhled na tištěný formulář Po vytvoření vzorových dat můžeme kliknutím na ikonu Náhled, které zobrazí dialog (4.2 – „Náhled na vzorová data vyplněná v potvrzení o studiu“) s náhledem na aktuální data v elektronickém formuláři vyplněná do papírového formuláře. 50 Vyplňovač formulářů Obrázek 4.2. Náhled na vzorová data vyplněná v potvrzení o studiu V tomto dialogu vidíte, jak budou vyplněná data vypadat na papíře. Odškrtnutím políčka Zobrazovat pozadí stránek se schovají všechna pozadí a v náhledu zůstanou jenom data k vytištění. Pomocí tlačítek Přiblížit a Oddálit, popřípadě pomocí skrolování kolečka myši při zmáčknuté klávese CTRL, lze měnit přiblížení zobrazeného formuláře. Tlačítko Tisk otevře dialog pro nastavení tisku aktuálních dat, který je blíže popsán dále v textu v kapitole 4.4 – „Tisk dat“. Šipkami Další záznam a Předchozí záznam můžeme přeskakovat mezi záznamy v tabulce. Varování Po skončení editování záznamů nezapomínejte prováděné změny ukládat do jejich datových úložišť, jinak o ně přijdete! Nejjednodušším způsobem uložení formuláře je klávesová zkratka CTRL+S. 4.4. Tisk dat Záznamy uložené v datových úložištích a načtené do Vyplňovače formulářů je možné tisknout na papírový formulář (popřípadě do PDF nebo PostScript souborů), buďto rovnou s pozadím, nebo pouze vyplněná (a dopočtená) data bez pozadí. K tisku se dá dostat dvěma způsoby, buďto přes náhled na aktuální záznam z elektronického formuláře (4.3 – „Náhled na tištěný formulář“) nebo stisknutím ikonky Tisk. První ze způsobů vybere k tisku právě zobrazený záznam, zatímco ten druhý tiskne všechny celé vybrané řádky v tabulce aktuálního datového zdroje. Poznámka Celý záznam je možné vybrat stisknutím čísla záznamu (prví sloupeček v každém řádku tabulky). Další záznamy je možné k výběru přidávat stejným způsobem při současném držení kláve- 51 Vyplňovač formulářů sy CTRL. Stisk čísla záznamu při současném držení klávesy SHIFT vybere celý rozsah řádků mezi tou aktuální a naposledy aktivovanou. Po vybrání záznamů k tisku je otevřen dialog pro nastavení tiskárny, 4.3 – „Nastavení tisku formulářů“. Obrázek 4.3. Nastavení tisku formulářů V levé části obrázku je zobrazen seznam stránek v aktuálním formuláři, který slouží pro výběr stránek k tisku. Dále je na dialogu důležitý výběr Výstupního formátu. Nakonec je možné nastavit, zda tisknout i pozadí stránek, nebo pouze hodnoty vyplněných (a dopočtených) polí. Volby Uložit všechny stránky do stejného souboru a Otevřít cílovou složku mají smysl pouze při tisku do souboru (PDF nebo PostScript formát). Přičemž první z nich má navíc smysl pouze pokud je v dokumentu více stránek a všechny mají stejnou velikost, v tu chvíli je možné rozhodovat, jestli má být pro celý formulář vytvořen soubor jediný, nebo zda má být každá stránka umístěna ve svém vlastním souboru. My zvolíme tisk do PDF bez pozadí a necháme systém, aby nám po vytisknutí otevřel Průzkumníka ve složce s vytvořenými soubory (nastavení viz 4.3 – „Nastavení tisku formulářů“). Po potvrzení dialogu s nastavením tisku na nás vyskočí systémový dialog pro výběr vzoru pro jména souborů, do kterých tisknout. Každý záznam se vždy tiskne do zvláštního souboru, v případě více rozměrů vybraných stránek nebo nezaškrtnutí výběrového tlačítka Uložit všechny stránky do stejného souboru se pak ještě každá stránka v rámci jednoho záznamu tiskne zvlášť. Proto v dialogu pro název souboru vybíráme pouze vzor, ke kterému budou přidávána počítadla jako rozlišovací prvky pro záznamy a stránky. Přesnou pojmenovávací konvenci naleznete dále v textu v oddílu 4.4.1 – „Pojmenování vytvořených souborů při tisku“. Po výběru vzoru jména souboru, kde jsme vybrali potvrzeni.pdf začne tisk a po jeho dokončení je otevřena složka s vytvořenými soubory, viz 4.4 – „Výpis vytištěných souborů“. 52 Vyplňovač formulářů Obrázek 4.4. Výpis vytištěných souborů Tisk do souborů ve formátu PostScript probíhá úplně stejně. Při tisku na tiskárnu vyskočí standardní systémový dialog pro výběr tiskárny, na kterou se má tisknout. Po jejím potvrzení se pro každý vybraný záznam vytisknou všechny stránky v pořadí definovaném ve formuláři. 4.4.1. Pojmenování vytvořených souborů při tisku Pojmenovávání výstupních souborů z tisku se řídí několika jednoduchými pravidly, my si je zde popíšeme a na konkrétním příkladě ukážeme názvy výstupních souborů. V každém z případů je nejprve vybrán vzor pro jméno souboru (dokument.pdf), doplnění vzoru závisí na počtu záznamů k tisku a na tom, zda se stránky jednoho záznamu tisknou zvlášť nebo do jednoho souboru. • Jeden záznam • Jedna stránka, popřípadě více stránek tištěných do stejného souboru — pouze název vzoru (dokument.pdf). • Více stránek každá tištěna zvlášť — název dokumentu následovaný číslem stránky (dokument_1.pdf, dokument_2.pdf, ...). • Více záznamů • Jedna stránka, popřípadě více stránek tištěných do stejného souboru — název vzoru a číslo záznamu doplněné nulami zleva (dokument_01.pdf, dokument_02.pdf, ...). • Více stránek každá tištěna zvlášť — název dokumentu následovaný číslem záznamu, nakonec číslo stránky (při dvou stránkách tedy dokument_01_1.pdf, dokument_01_2.pdf, dokument_02_1.pdf, ...). 53 Kapitola 5. Integrace s PHP Když je vytvořen aplikační vstup, je možné jej vyexportovat pro použití ve webovém prostředí. První možností je vytvořit HTML stránku, na které bude stejný formulář, jaký byl navržen v designeru elektronického formuláře. Položky v tomto formuláři se chovají zcela identicky jako při vyplňování ve Vyplňovači formulářů. Jediný drobný rozdíl je ten, že položky pro editování času a data jsou nahrazeny obyčejnými textovými políčky. V HTML formuláři jsou dostupná tlačítka pro odeslání vyplněných dat a vymazání celého formuláře. Vygenerovaná HTML stránka bohužel není moc dobře použitelná, neboť se nedá integrovat do již hotové webové stránky. Je sice možné mírně ovlivnit vzhled pomocí externího CSS souboru, ale samotný obsah změnit nelze. Proto je možné exportovat dokument pro použití se skriptovacím jazykem PHP. Výstupem tohoto exportu je soubor s příponou .php. Tento soubor obsahuje dvě funkce. Funkce generateScript, která vygeneruje Javascriptovou část webové stránky, takže je možné zavolat ji např. při generovaní hlavičky dokumentu. Funkce generateForm pak vygeneruje celý obsah elementu <form>. Je tedy možné vložit formulář na libovolné místo ve stránce. Pokud je při exportu vybráno některé z CSV úložišť, je navíc vygenerovaná funkce saveForm, která dovede uložit vyplněný formulář do zadaného CSV souboru. Platí zde drobné omezení — nastavené kódování úložiště je ignorováno a je použito to, které je nastavené v interpretru jazyka PHP. Jména položek, která jsou vrácena při odeslání nejsou z technických důvodů přesně ta, pod kterými se položky vyskytují při návrhu formuláře. Tato jména jsou modifikována tak, že se před začátek vloží dvě podtržítka a každá tečka ve jméně je nahrazena rovněž dvěma podtržítky. Takže např položka skupina1.polozka1 bude vrácena jako __skupina__polozka1. Z toho jména je snadné získat zpátky originální jméno položky. Stačí odstranit první dvě podtržítka a všechna zbylá dvojitá opět nahradit tečkou. Detailnější informace o tom, jak lze integrovat vygenerovaný PHP soubor do vlastních stránek, lze nalézt ve složce PHP, kde je okomentovaný příklad použití. 54 Kapitola 6. Detektor oblastí a rotace Detektor oblastí je zodpovědný za detekci oblastí v obrázku a jeho narovnání. Lze v něm pohodlně obrázek nakalibrovat a zároveň umožňuje formulář načíst z už naskenovaného obrázku, případně si naskenovat nový. V následujícím textu vám popíšeme typický způsob použití detektoru a zároveň si ukážeme veškerou funkčnost. 6.1. Načtení obrázku Obrázek pro analýzu obrazu můžeme získat dvěma způsoby — načíst již připravený obrázek nebo použít scanner nebo jiné ekvivalentní zařízení. V prvním případě stačí kliknout na ikonu Otevřít soubor a poté zvolíme obrázek s naskenovaným formulářem. Ve druhém případě poklepáním na ikonku Scanner otevřeme standardní systémový dialog pro výběr scanneru a dále v dodaném software k vašemu scanneru naskenujte obrázek. 6.2. Nastavení detekce hran Pokud jste si již otevřeli nebo naskenovali nějaký obrázek, mělo by být dalším vaším krokem nastavení detekce hran. K tomu slouží následující menu v pravém sloupečku. Obrázek 6.1. Nastavení detekce hran První nastavení intenzity odšumění by typicky mělo zůstat nezměněno. Pokud obrázek získáváte ze scanneru bude šum minimální a výchozí nastavení naprosto dostačuje. Toto nastavení má smysl jen pokud dostanete silně zašuměný obrázek získaný například z fotoaparátu se špatně nastaveným ISO. Vzhledem k tomu, že získávat obrázek formuláře jinak než pomocí scanneru silně nedoporučujeme, vystačíte pouze s druhým nastavením. Pomocí něj nastavujete práh citlivosti pro detekci hran. Zjednodušeně se dá říct, že čím víc vlevo bude nastavení, tím více hran bude zdetekováno a naopak. Znovu by nemělo být třeba výchozí hodnotu měnit pro naprostou většinu formulářů. To, zda je nastavení potřeba, poznáte pomocí modrého obdélníku, se kterým lze pohybovat a měnit jeho velikost. Především pro méně výkonné počítače může být pohyb příliš velkého obdélníku příliš náročný. Uvnitř tohoto obdélníku uvidíte zelené čáry, které zobrazují hrany rozpoznané naším algoritmem. Pro správně nastavenou citlivost by výsledek měl vypadat následovně: 55 Detektor oblastí a rotace Obrázek 6.2. Správně nastavený práh Pokud je nastavený práh příliš nízký, získáte přibližně tento výsledek (čáry jsou detekovány i tam, kde je nečekáte) Obrázek 6.3. Příliš nízký práh Nakonec je-li práh příliš vysoký jsou čáry přerušované nebo chybí úplně. 56 Detektor oblastí a rotace Obrázek 6.4. Příliš vysoký práh Jakmile máte optimálně nastavenou citlivost můžete pokračovat narovnáním obrázku. Poznámka Může se stát, že různé části formuláře potřebují různou citlivost. To se dá řešit pomocí dodatečné detekce, kdy detekci provádíte pouze po částech. 6.3. Narovnání obrázku V tuto chvíli předpokládáme správně nastavenou citlivost detekce hran. Pokud jste tak neučinili, postupujte dle pokynů v předchozí kapitole. K narovnání obrázku formuláře slouží následující menu. Obrázek 6.5. Menu pro rotaci Tlačítky vlevo a vpravo otočíte obrázek o 90° vlevo resp. vpravo. Nejzajímavější ovšem je tlačítko Autodetekce, které vám narovná křivě naskenovaný obrázek. 6.4. Oříznutí obrázku Tento nástroj vám umožní oříznout obrázek tak, aby obsahoval formulář bez okrajů. Spustíte jej kliknutím na Vyříznout. Zobrazí se vám následující dialog Obrázek 6.6. Okno pro potvrzení oříznutí 57 Detektor oblastí a rotace a celý dialog se přepne do ořezávacího módu. Obrázek 6.7. Ořezávací mód Nyní vyberte oblast pro oříznutí a stiskněte Dokončit. 6.5. Kalibrace Kalibrace se provádí naprosto stejně jako v editoru viz 3.4.3 – „Kalibrace pozadí stránky“. Před další detekcí by měla být kalibrace co nejpřesnější. 6.6. Nastavení detekce obdélníků Nastavení detekce obdélníků se provádí pomocí následujícího menu. Obrázek 6.8. Menu pro nastavení detekce obdélníků Minimální velikost značí minimální rozměr detekovaných oblastí v milimetrech. Pokud máte špatně provedenou kalibraci, bude toto nastavení nekorektní. Oblé rohy slouží k nastavení kulatých rohů u oblastí. Obecně platí, že čím víc procent, tím kulatější. Kulatost se počítá vůči minimální velikosti oblasti. 58 Detektor oblastí a rotace 6.7. Tečkované čáry Pokud chcete detekovat tečkované čáry, věnujte tomuto menu zvláštní pozornost. Můžete zde nastavit maximální velikost teček a tím velmi ovlivnit kvalitu výsledku. Detektor je na správnost tohoto nastavení poměrně citlivý. Detekovat tečkované čáry značí zda při detekci detekovat tečkované čárky. Obrázek 6.9. Menu pro nastavení tečkovaných čar 6.8. Další nastavení Další nastavení jsou následující. Obrázek 6.10. Menu pro další nastavení Odstranit staré zdetekované oblasti značí, zda při detekci budou nejprve odstraněny dříve vydetekované oblasti (pokud se provádí detekce ve vybrané oblasti, budou oblasti smazané pouze v této vybrané oblasti). Provádět analýzu jen ve vybrané oblasti zahájí při zaškrtnutí detekci v rámci oblasti. 6.9. Detekce a ukončení Pro detekci a ukončení použijte tato tlačítka Obrázek 6.11. Menu pro detekci a ukončení Tlačítko Analyzovat spustí analýzu nad obrázkem. Jejím výsledkem jsou detekované oblasti. Pokud jste s výsledkem spokojeni můžete detekci zakončit tlačítkem Ukončit. V opačném případě můžete změnit některá nastavení a zkusit detekci znovu. Pokud si detekci rozmyslíte úplně stiskněte Zrušit. 6.10. Ostatní Pokud chcete zrušit veškeré detekce a transformace stiskněte tlačítko reset. Pro nastavení chování pravítka použijte tlačítko Nastavení pravítka. Otevře se vám následující dialog 59 Detektor oblastí a rotace Obrázek 6.12. Dialog pro nastavení pravítka kde můžete nastavit veškeré chování pravítka. 60 Kapitola 7. Závěr Na závěr bychom vám chtěli popřát příjemnou práci s našimi programy, aby vám pomohly při vaší práci a usnadnily vám vytváření a vytváření formulářů. Zároveň doufáme, že vám tento manuál přiblížil naše aplikace tak, abyste s nimi mohli běžně pracovat. Další informace o projektu Form Tools můžete nalézt na adrese http://formtools.jezci.net/. Pokud byste měli jakýkoli dotaz, problém či připomínku, neváhejte nás kontaktovat na adrese [email protected]. 61
Podobné dokumenty
Číslo 4/2015 ke stažení ve formátu PDF
Vždy, když některý z 2,5 tisíce běžců proběhl cílovou rovinku, tak hlásili jeho jméno a zemi, ze které je – celkem byli ze 111 států. A když jsem dobíhal já, hlásili, že dobíhá první
nevidomý běžec...
Studijní text - Personalizace výuky prostřednictvím e
Pro předmět Internet a sítě 1. semestru oboru Automatické řízení a inženýrská informatika ste
obdrželi studijní balík obsahující:
Příloha č 4 - Náležitosti PD - Státní fond dopravní infrastruktury
veřejně přístupných komunikací a ploch souvisejících se staveništěm osobami s omezenou
schopností pohybu a orientace,
Z hlediska bezbariérové užívání stavby je nutné popsat, jakým způsobem bude
sta...
Otevřít náhled PDF
u Znojma jsme se rozhodli uspořádat další konferenci. Pokračujeme tak v pravidelném půlročním setkávání manažerů a Centrály Partners,“ vysvětluje Vlaďka Cisarzová z Centrály, která má celou akci na...
opel astra
Vnější zrcátka .............................. 33
Vnitřní zrcátka .............................. 35
Okna ............................................ 35
Střecha ........................................
Stručný průvodce pro práci s programem ClaroRead
dočasně upravovat velikost, barvu a typ písma, rozestupy mezi znaky, řádky i odstavci a měnit barvu pozadí celého dokumentu. V průběhu psaní navrhuje vhodná slova a k dispozici je výkonná
oprava pr...
SIMULÁCIA PAĽBY PROTILIETADLOVEJ RAKETOVEJ JEDNOTKY
Obrázok 7: Blok Stateflow na realizáciu prepínania režimov NRL
Popisovaný blok priebežne vyhodnocuje presnosť natočenia anténneho postu NRL. Zároveň
tvaruje vyhľadávaciu charakteristiku podľa toho,...
Uživatelský manuá k programu FormOffice
Postup přidávání jednotlivých položek je jednoduchý:
1. v rozbalovacím menu "Přidat políčko" vyberete požadovanou položku z tabulky
2. tlačítkem
přidáte položku na formulář buď do hlavičky, nebo na...