Programování tiskových šablon ve formátu PDF

Home / Support / Příručka administrátora /

Programování tiskových šablon ve formátu PDF

1. Předmět a účel příručky

Tato příručka se snaží popsat všechny prostředky nutné k vytváření různých tiskových šablon ve formátu PDF. Pro vytváření tiskových šablon je zapotřebí:

  • Visual Studio 2013 s doplňkem Report Designer
  • Knihovny „NETGeniumConnection.dll“ a „O2S.Components.PDF4NET.dll“
  • NET Genium nainstalované na lokálním počítači
  • Projekt externích funkcí „ngef“
  • Aplikace pro prohlížení „pdf“ souborů

Požadovaným výstupem je zakomponování nové tiskové šablony v podobě C# kódu do externí funkce. K tomu je nejprve nutné navrhnout novou tiskovou šablonu v rámci nového projektu – například konzolové aplikace – ve vývojářském nástroji Visual Studio. Následně tuto aplikaci spustit, čímž se vytvoří zdrojový kód v jazyce C#, který lze vložit do externí funkce.

Zjednodušený postup:

  • 1. Nainstalovat Visual Studio 2013 (nebo vyšší)
  • 2. Vytvořit konzolovou aplikaci
  • 3. Přidat reference na potřebné knihovny pro spuštění konzolové aplikace
  • 4. Vložit kód do třídy Program
  • 5. Vytvořit „rdlc“ soubor
  • 6. Spustit konzolovou aplikaci + zobrazit vygenerované soubory
  • 7. Použít jednotlivé nástroje Visual Studia pro nakreslení šablony
  • 8. Nastavit vlastnosti jednotlivých elementů
  • 9. Spustit finální verzi konzolové aplikace
  • 10. Zakomponovat tiskovou šablonu do externí funkce

2. Vytvoření konzolové aplikace

  • Spusťte program Visual Studio (spusťte zástupce z plochy nebo přes nabídku „Start“ – „Programy“ – „Microsoft Visual Studio“ – „Microsoft Visual Studio“).
  • Z menu vyberte „File“ – „New“ – „Project“.

Obrázek.png

  • Vyberte jako projekt „Console Application“.
  • Pojmenujte nový projekt.
  • Zadejte umístění projektu.
  • Stiskněte tlačítko „OK“.

Obrázek.png

3. Přidání referencí

  • Pro bezchybné spuštění konzolové aplikace je důležité do projektu přidat reference na knihovny, které jsou uloženy v adresáři „N:\NetGenium\Projekty\NetGenium\References4”. Toto se udělá následujícím způsobem:
  • Klikněte pravým tlačítkem na složku „References“ v okně „Solution Explorer“.

Obrázek.png

  • Vyberte záložku „Browse“ a v ní se dostaňte do adresáře „N:\NetGenium\Projekty\NetGenium\References4”.
  • Z nabízených souborů „dll“ vyberte soubor „NETGeniumConnection.dll“.

Obrázek.png

  • V adresáři „N:\NetGenium\Projekty\NetGenium\References4\Pdf” vyberte soubor „O2S.Components.PDF4NET.dll“.

Obrázek.png

4. Napsání kódu do třídy Program

  • Visual Studio po vytvoření nové konzolové aplikace vytvořilo automaticky novou třídu „Program“, která je vidět na obrázku níže. Metoda „Main(string [] args)“ třídy „Program“ je nyní prázdná, a proto v dalším kroku je vložte odpovídající kód do těla této metody. Tento kód je tvořen 3 následujícími řádky:
    new NETGenium.Pdf.RdlcConverter(Config.RootPath).ConvertFiles();
    Console.WriteLine("OK");
    // Console.ReadLine();
    Obrázek.png
  • Metoda, která je na prvním vloženém řádku, zajistí vyhledávání všech „rdlc“ souborů, které existují v daném projektu, a následně z nich vytvoří soubory s příponou:
    • „cs“ – výsledný zdrojový kód, který později po vyladění tiskové šablony zakomponujeme do externí funkce.
    • „pdf“ – náhled „pdf“ dokumentu, který vznikne spuštěním zdrojového kódu výše – slouží pro kontrolu během ladění tiskové šablony.

5. Vytvoření „rdlc“ souboru

  • Samotný návrh tiskové šablony se bude vytvářet ve speciálním souboru. Tento soubor má příponu „rdlc“. Do vytvářeného projektu se tento soubor vloží tímto postupem:
  • Klikněte pravým tlačítkem na název projektu v okně „Solution Explorer“.
  • Vyberte z nabídky možnosti „Add“ – „New Item“.

Obrázek.png

  • Vyberte soubor určený pro vytváření zpráv – z nabídky „Installed Templates“ vyberte „Reporting“ a z těchto reportovacích šablon vyberte tu s názvem „Report“. Dále můžete nastavit název tohoto souboru (důležité je, aby soubor měl koncovku „rdlc“) a potvrďte výběr kliknutím na tlačítko „Add“.

Obrázek.png

  • Po kliknutí na tlačítko „Add“ se otevře „rdlc“ soubor, který byl vytvořen v předcházejících krocích, v režimu „Design“. Dalším možným módem je režim „XML“, který lze otevřít tak, že kliknete pravým tlačítkem na daný „rdlc“ soubor, vyberete se z nabídky možnost „Open With…“ a z nově otevřené nabídky vyberete možnost „XML (Text) Editor“.
  • Pro vytvoření tiskové šablony bude ovšem nejdůležitější režim „Design“, ve kterém bude popisován další postup prací a ze kterého zmíněné „XML“ vychází.

6. Spuštění konzolové aplikace

  • Pro zkontrolování bezchybnosti napsaného kódu a vložení všech nutných knihoven je již možné spustit konzolovou aplikaci. To provedete stisknutím zelené šipky v horním panelu nebo po stisknutí klávesy „F5“.

Obrázek.png

  • Po spuštění konzolové aplikace dojde k vytvoření již zmíněné dvojice souborů („cs“ a „pdf“). Tyto soubory budou vytvořeny ve stejné složce, jako je „rdlc“ soubor. To znamená, že je možné je otevřít například pomocí programu Total Commander. Navíc oba dva soubory lze otevřít a vidět ve struktuře projektu ve Visual Studiu.

Postup ve Visual Studiu:

  • Otevřete okno „Solution Explorer“.
  • Stiskněte tlačítko „Show all files“.
  • Zobrazí se všechny soubory v projektu.

Obrázek.png

  • Po každém spuštění vždy dojde k přepsání těchto souborů, a proto pokud je potřeba si současný soubor s C# kódem ponechat, je nutné daný soubor uložit pod jiným názvem, než má původní soubor.
  • Nejdůležitějším ze zmíněných dvou souborů je ten s koncovkou „cs“. Ve většině případů bude tento soubor dále upravován, aby mohl být vložen do nějaké externí funkce. Ještě před upravováním je možné soubor, který byl vytvořen automaticky spuštěním, zkontrolovat, jestli neobsahuje nějaké chyby (reference, atd.).
  • V okně „Solution Explorer“ klikněte pravým tlačítkem myši na soubor s koncovkou „cs“ a vyberte možnost „Include In Project“. Stejným způsobem lze soubor z projektu vyřadit. S tím rozdílem, že nepoužijete příkaz „Include“ ale „Exclude“.

Obrázek.png

7. Nástroje Visual Studia pro vytvoření reportu

Visual Studio nabízí poměrně velké možností způsobů, jak v souboru „rdlc“ vytvořit libovolnou tiskovou šablonu. Při samotném otevření „rdlc“ souboru v režimu „Design“ je na hlavní ploše k dispozici kreslící plátno, na které se bude kreslit budoucí tisková šablona. Po kliknutí levým tlačítkem do těla kreslícího plátna je k dispozici po pravé straně okno „Properties“, ve kterém lze nastavovat vlastnosti vybraného elementu. V tomto případě se jedná o element „Body“. Okno „Properties“ je k dispozici i u všech dalších reportovacích elementů, které Visual Studio nabízí, takže je možné nastavovat různé vlastnosti čárám, textboxům, obdélníkům, tabulkám a obrázkům. Okno „Properties“ lze také otevřít po kliknutí na záložku „View“ a vybrání možnosti „Properties window“.

Obrázek.png

  • Elementy do kreslícího plátna lze vkládat pomocí „Toolboxu“, který je k dispozici po levé straně nebo v horním menu pod záložkou „View“ a možností „Toolbox“.

Obrázek.png

  • Další možností, jak nastavovat vlastnosti jednotlivých elementů, je řádek, který se nachází pod horním menu a hodně připomíná možnosti nastavování, která jsou k dispozici například v programu Word, takže uživatel může využít i tuto možnost, pokud se mu nezamlouvá nastavování přes okno „Properties“.

Obrázek.png

8. Možnosti nastavení jednotlivých elementů

  • Nejdříve ze všeho při vytváření nové tiskové šablony nastavte parametry papíru. Tyto parametry se nastavují v elementu „Body“. Levým tlačítkem klikněte kamkoli na kreslící plátno a v okně „Properties“ nastavte výšku a šířku kreslící plochy (parametr „Size“). Na obrázku níže jsou parametry uvedeny pro rozměr A4 (210 mm x 297 mm). Po nastavení šířky na hodnotu 210 mm Visual Studio přenastaví hodnotu na novou hodnotu 209.99999 mm.

Obrázek.png

  • Po nastavení rozměrů kreslící plochy je možné do ní vkládat jednotlivé elementy, přitom je vhodné si na konci vytváření tiskové šablony zkontrolovat nastavení rozměrů kreslící plochy, protože ve chvíli, pokud se element roztáhne o něco víc, než jsou rozměry kreslící plochy, dojde k úpravě kreslící plochy a k zvětšení rozměrů této plochy.
    Mezi elementy, které budou vkládány do tiskové šablony, patří:
    • Text Box
    • Line
    • Image
    • Rectangle
    • Table
  • Všechny tyto elementy je možné najít v „Toolboxu“ a přetažením je přemístit na kreslící plochu.

8.1. Text Box

  • Po přetažení na kreslící plochu je možné jednotlivým textovým polím nastavovat různé vlastnosti v okně „Properties“. Těmito vlastnostmi jsou:
  • BackgroundColor – Nastavení barvy pozadí tiskové šablony
  • BorderColor – Nastavení barvy hranic textboxu
  • BorderStyle – Nastavení typu čáry, která ohraničuje daný textbox. Možnosti: „Default“,„Dashed“, „Dotted“, „Double“, „None“, „Solid“
  • BorderWidth – Nastavení tloušťky čáry ohraničující textbox
  • Color – Nastavení barvy písma
  • FontFamily – Nastavení typu písma
  • FontSize – Nastavení velikosti písma
  • FontStyle – Nastavení stylu písma. Možnost nastavení stylu kurzíva („italic“)
  • FontWeight – Nastavení tloušťky písma. Možnost nastavení „Bold“.
  • PaddingLeft – Nastavení levého paddingu
  • PaddingRight – Nastavení pravého paddingu
  • PaddingTop – Nastavení vrchního paddingu
  • PaddingBottom – Nastavení spodního paddingu
  • TextAlign – Nastavení horizontálního zarovnání. Možnosti nastavení: „Default“, „General“, „Left“, „Center“, „Right“
  • VerticalAlign – Nastavení svislého zarovnání. Možnosti nastavení: „Top“, „Middle“, „Bottom“
  • WritingMode – Nastavení svislého / vodorovného textboxu. Možnost „Vertical“ = svislý, „Horizontal“ = vodorovný
  • Dále v okně „Properties“ jsou parametry jako „Location“, „Size“ a „Value“. Tyto parametry není ovšem nutné nastavovat v okně „Properties“, protože se samy přenastaví ve chvíli, pokud uživatel změní pozici/velikost/text na kreslícím plátně.
    Samotný text uvnitř textboxu může být dvojího druhu – statický a dynamický. Pod slovem statický si lze představit takový text, který bude do tiskové šablony vložen jako konstanta. To znamená, že se po vygenerování tiskové šablony v NET Geniu nebude měnit. Druhým typem textu je tzv. dynamický. Ten se bude načítat z databáze, a tudíž pro každou tiskovou šablonu bude jiný.
    Rozdíl mezi oběma typy textů je patrný na obrázku níže, protože statický text je napsán normálním textem (příklad 1 na obrázku: „NET Genium s.r.o.“), zatímco dynamický text je vyjádřen následovně „#ng_nazevtabulky#.#ng_nazevsloupce#” (příklad 2 na obrázku: „ng_fv#.#ng_cisloulice#“). Toto označení umožňuje po spuštění rozlišovat mezi těmito dvěma typy textu a následně tento rozdíl také promítnout do C# kódu.

Obrázek.png

8.2. Line

  • Element Line se zobrazí v Report Designeru jako čára, které je možné nastavit následující parametry.
  • LineColor – Nastavení barvy čáry
  • LineStyle – Nastavení typu čáry. Možnosti: „Dashed“, „Dotted“, „Solid“
  • LineWidth – Nastavení tloušťky čáry
  • Další parametry jako jsou umístění a délka čáry lze nastavit stejně jako v případě elementu Textbox, přetažením na kreslícím plátně.

8.3. Image

  • Do kreslícího plátna můžete vložit i obrázek, který pak bude v tiskové šabloně. Obrázek je do kreslícího plátna vložen jako „Embedded“, což znamená, že se do projektu musí tento obrázek importovat. Pro správné vložení obrázku je nutno nejprve z „Toolboxu“ vybrat element „Image“. Po přetažení tohoto elementu do kreslícího plátna se otevře okno „Image Properties“. Zde je potřeba nastavit zdroj dat („Select the image source:“) na možnost „Embedded“ a poté stisknout tlačítko „Import“, kterým lze specifikovat cestu k vybranému obrázku. Po naimportování obrázku na kreslící plátno, se stiskne tlačítko „OK“ a na kreslícím plátně je možné vidět importovaný obrázek.

Obrázek.png

  • Všechny parametry, které lze specifikovat elementu Image, jsou editovatelné přímo na kreslícím plátnu.
    Ve většině případů se jedná o polohu obrázku a o jeho výšku a šířku.

8.4. Rectangle

  • U elementu typu obdélník lze parametry jako „Location“ (poloha elementu), výška a šířka obdélníku určit opět přímo na kreslícím plátně pomocí tažení elementu po kreslícím plátnu. Obdélník ovšem ještě nabízí další nastavení, která se již musí specifikovat v okně „Properties“. Těmito vlastnostmi jsou:
  • BackgroundColor – Nastavení barvy pozadí rámečku
  • BorderColor – Nastavení barvy ohraničení rámečku
  • BorderStyle – Nastavení typu čáry ohraničení. Možnosti: „Default“, „Dashed“, „Dotted“, „Double“, „None“, „Solid“
  • BorderWidth – Nastavení tloušťky ohraničení

8.5. Table

Tabulka je posledním elementem, který je potřebný pro tvorbu tiskových šablon. Element Table musí mít specifikovaný zdroj dat, protože Visual Studio při spuštění konzolové aplikace a nedefinování zdroje dat zahlásí chybu. Po přetažení elementu Table z „Toolboxu“ na kreslící plátno, se otevře okno „Tablix Properties“ a pokud již dříve nebyl definován nějaký zdroj dat, hned vzápětí se otevře okno, ve kterém by mělo dojít k identifikaci zdroje dat. Pro tento účel je zde průvodce, kterým dojde k nastavení daného zdroje dat. Pokud by nedošlo k definici zdroje dat, tak by sice Visual Studio dovolilo na kreslící plátno vložit element Table, ale při následném spuštění by „Debugger“ zahlásil chybu.

Kroky nastavení zdroje dat:

  • 1. Vybrat jakého typu bude zdroj dat.
  • Vyberte možnost „Object“ a stiskněte tlačítko „Next“.

Obrázek.png

  • 2. Vybrat knihovnu z nabízených možností.
  • Vyberte možnost „O2S.Components.PDF4NET/O2S.Components.PDF4NET/PageNumber” a stiskněte tlačítko „Finish“.

Obrázek.png

  • Parametry tabulky, které jsou důležité pro tiskovou šablonu, lze nastavit již na kreslícím plátně pomocí tažení elementu nebo měněním rozměrů. Na kreslícím plátně je možné nastavit takové parametry jako „Location“ (poloha tabulky), šířky jednotlivých sloupců, výšky jednotlivých řádků, texty v tabulce, počet sloupců, počet řádků.
    Jednotlivé buňky tabulky jsou textboxy, takže je možné jim nastavovat stejné parametry jako v případě klasických textboxů. Element tabulka se využívá hlavně pro položky. V C# kódu jsou položky vkládány do tiskové šablony pomocí cyklu, protože jich ve většině případů bývá v databázi více. Pro zajištění napsání cyklu do C# kódu po spuštění konzolové aplikace je nutné mít v tabulce přesně dva řádky – řádek hlavičky a řádek s daty.

9. Finální spuštění konzolové aplikace

  • Po přidání všech elementů, které by měly být v zamýšlené tiskové šabloně, a nastavení jejich parametrů, je možné sestavovat různé tiskové šablony. Dole na obrázku je například „rdlc“ soubor tiskové šablony proforma faktury.

Obrázek.png

10. Zakomponování tiskové šablony do externí funkce

Většina souborů starajících se o vygenerování tiskových šablon se bude muset převést do externích funkcí, které potom budou nahrány do daného NET Genia.

Proces zakomponování neobnáší pouze přidání nových „rdlc“ a „cs“ souborů do projektu (externí funkce). Součástí jsou také různé úpravy třídy „ngef.cs“, která je vždy součástí externích funkcí, přidání nových knihoven do složky „References“ a úpravy vkládané třídy. Zakomponování tiskové šablony může být provedeno do nové nebo již existující externí funkce. Úpravy třídy „ngef.cs“ se právě liší v tom, o jakou externí funkci jde.

Je také nutné docela často udělat určité změny i v daném NET Geniu.

10.1. Postup pro novou externí funkci (třída „ngef.cs“)

10.1.1. Zkopírovat do složky zákazníka projekt v adresáři „References/ngef“

  • V adresáři „N:\NetGenium\Projekty\NetGenium\ngef” je k dispozici šablona externí funkce. Tuto šablonu zkopírujte do adresáře zákazníka, pro kterého bude nová externí funkce programována.

10.1.2. Otevřít projekt

  • Projekt otevřete dvojitým kliknutím na soubor „ngef.csproj“ ve zkopírované složce „ngef“ v adresáři daného zákazníka.
  • Druhou možností, jak novou externí funkci otevřít, je otevření pomocí Visual Studia. Pro tento způsob vyberte po startu Visual Studia možnost „File“ – „Open“ – „Project/Solution…“.

Obrázek.png

  • Poté zadejte cestu k projektu. Hledaným projektem bude ten projekt, který byl zkopírován do složky zákazníka v předchozím kroku.

10.1.3. Přidat vyžadovanou třídu do projektu

  • Přidání třídy vytvořené konzolovou aplikací do externí funkce se provedete kliknutím pravým tlačítkem na název projektu a vyberete „Add“ – „Existing Item“.

Obrázek.png

  • Poté se otevře okno, ve kterém zadáte cestu k požadovanému souboru. Přidávaným souborem bude soubor s příponou „cs“, který byl vytvořen spuštěním naší konzolové aplikace.

10.1.4. Reference

  • V případě vytvoření nové externí funkce je nutné kromě knihoven, které již byly použity v konzolové aplikaci – „NETGeniumConnection.dll“ a „O2S.Components.PDF4NET.dll“ – přidat knihovnu „System.Drawing.dll“. Tato knihovna je uvedena za klauzulí „using“, ale protože není uvedena ve složce „References“, Visual Studio by při kompilaci externí funkce zahlásilo syntaktickou chybu.

Obrázek.png

  • Nahrání knihovny „System.Drawing.dll“ do projektu se provede stejným způsobem, který tu již byl několikrát popisován. Malou změnou bude pouze to, že při zadávání cesty ke knihovně se neklikne na záložku „Browse“ ale na „.NET“. V této záložce pak již stačí najít z dlouhého seznamu knihoven tu požadovanou.

Obrázek.png

10.1.5. Upravit třídu „ngef.cs“

  • Třída „ngef.cs“ slouží hlavně pro volání metod, které jsou nabízeny externí funkcí. Tělo čisté externí funkce by nyní mělo vypadat následovně.

Obrázek.png

  • Do místa, kde je vidět kurzor a červená šipka, vložte kód, pomocí kterého dojde k zavolání metody „Create ()“ vložené třídy, která zajistí vygenerování „pdf“ dokumentu.
case "NETGenium.Print":
{
if (conn.PrintingProcess.Template == "Faktura.pdf")
{
conn.PrintingProcess.FileName = Test.Report5.Create(conn.PrintingProcess.FilePath, Config.RootPath, conn) + ".pdf";
}
return "";
}
  • Pomocí atributu „Template“ třídy „PrintingProcess“ je identifikována šablona, podle které se vygeneruje požadovaný dokument, který se může následně vytisknout. V NET Geniu musí být vždy šablona nahraná. V praxi to znamená, že stačí uložit prázdný „pdf“ soubor například s názvem „Faktura.pdf“ do adresáře „Templates“ daného NET Genia. Dále v kódu je nutné, aby stringový řetězec „Faktura.pdf“, který je uveden v podmínce, přesně odpovídal názvu souboru, který je nahraný v NET Geniu v adresáři „Templates“. Jinak by totiž nebyla splněna podmínka a nedošlo by k vygenerování správné šablony.
    Pokud je splněna podmínka, může dojít zavolání metody třídy, která byla vytvořena Report Designerem. Vyvolaná metoda zajistí vygenerování požadovaného dokumentu podle kódu, který je uvnitř této metody. Metody většinou vracejí název souboru, který je ukládán do atributu „FileName“ třídy „PrintingProcess“.
    Jak je možné vidět na obrázku, každá metoda, která generuje tiskový výstup ve formátu „pdf“, má vstupní parametry. První parametrem je cesta, kam se má uložit nově vygenerovaný dokument, druhým parametrem je stringový řetězec, který specifikuje cestu k použitému NET Geniu, posledním parametrem je reference databáze, z které jsou získávána data.

10.2. Postup pro existující externí funkci (třída „ngef.cs“)

10.2.1. Otevřít zadaný projekt, kde je daná externí funkce

  • Po startu Visual Studia vyberte možnost „File“ – „Open“ – „Project/Solution…“

Obrázek.png

  • Poté zadejte cestu k projektu. Klikněte pravým tlačítkem na název projektu a vybrat „Add“ – „Existing Item“

Obrázek.png

  • Poté se otevře okno, ve kterém zadáte cesta k požadovanému souboru. Přidávaným souborem bude soubor s příponou „cs“, který byl vytvořen spuštěním naší konzolové aplikace.

10.2.2. Reference

  • Do projektu je samozřejmě potřeba nahrát všechny chybějící knihovny, které jsou používány nově vloženou třídou. Postup je naprosto stejný jako vkládání knihoven do konzolové aplikace. Ve většině případů chybějící knihovnou bude „O2S.Components.PDF4NET.dll“.

10.2.3. Upravit třídu „ngef.cs“, ve které se bude volat nově přidaná třída

  • V projektu je třída „ngef.cs“, pomocí které jsou v NET Geniu volány metody externí funkce. Ve třídě „ngef.cs“ je použita podmínka typu „case“. Pro tisk v NET Geniu je určena varianta, která je označena jako „NETGenium.Print“.
  • Do identifikátoru „NETGenium.Print“ přidejte následující kód:
case "NETGenium.Print":
{
if (conn.PrintingProcess.Template == "Faktura.pdf")
{
conn.PrintingProcess.FileName = Test.Report5.Create(conn.PrintingProcess.FilePath,
Config.RootPath, conn) + ".pdf";
}
return "";
}
  • Pomocí atributu „Template“ třídy „PrintingProcess“ je identifikována šablona, podle které se vygeneruje požadovaný dokument, který se může následně vytisknout. V NET Geniu musí být vždy šablona nahraná. V praxi to znamená, že stačí uložit prázdný „pdf“ soubor například s názvem „Faktura.pdf“ do adresáře „Templates“ daného NET Genia. Dále v kódu je nutné, aby stringový řetězec „Faktura.pdf“, který je uveden v podmínce, přesně odpovídal názvu souboru, který je nahraný v NET Geniu v adresáři „Templates“. Jinak by totiž nebyla splněna podmínka a nedošlo by k vygenerování správné šablony.
    Pokud je splněna podmínka, může dojít zavolání metody třídy, která byla vytvořena Report Designerem. Vyvolaná metoda zajistí vygenerování požadovaného dokumentu podle kódu, který je uvnitř této metody. Metody většinou vracejí název souboru, který je ukládán do atributu „FileName“ třídy „PrintingProcess“.
    Jak je možné vidět na obrázku, každá metoda, která generuje tiskový výstup ve formátu „pdf“, má vstupní parametry. První parametrem je cesta, kam se má uložit nově vygenerovaný dokument, druhým parametrem je stringový řetězec, který specifikuje cestu k použitému NET Geniu, posledním parametrem je reference databáze, z které jsou získávána data.

10.3. Úprava nově vložené třídy

  • Po zakomponování nové třídy do již existující třídy „ngef.cs“ je potřeba kód v nově vložené třídě upravit, aby se třída chovala přesně tak, jak se očekává – vygeneroval se stejně vypadající „pdf“ dokument, jako byl navržen v aplikaci Report Designer „rdlc“ soubor.

10.3.1. Změna namespacu

  • Nejprve ze všeho změňte namespace třídy, protože zcela jistě nebude odpovídat namespacu celého projektu.

10.3.2. Změna názvu vložené třídy

  • Dále dobrým zvykem je pojmenovávat třídy podle toho, co by měla daná třída představovat. Takže například pokud se bude generovat faktura, je dobré tuto třídu nazvat „Faktura. cs“.

10.3.3. Změna názvu výstupního souboru

  • Vhodné je také změnit stringový řetězec, který má metoda vložené třídy vracet. Změna stringového řetězce se projeví v názvu výstupního souboru.

Obrázek.png

10.3.4. Úprava vykreslování obrázku

  • Pokud se v návrhu šablony budou objevovat obrázky, je důležité upravit kód ve vložené třídě podle následujícího obrázku.

Obrázek.png

  • Důležitý je první řádek a parametr metody „GetManifestResourceStream()“. Tento parametr je nutné upravit, protože tato metoda bude v projektu hledat soubor specifikovaný v parametru metody. Hledaným souborem bude „rdlc“ soubor. Pokud metoda nebude moci tento soubor v projektu najít, tak při pokusu o vygenerování „pdf“ dokumentu v NET Geniu dojde k neošetřené výjimce a generování bude ukončeno. První část parametru specifikuje název knihovny (assembly). V našem příkladu upravujeme projekt (externí funkci) pod názvem „ngef“. V další části mohou být specifikovány složky, ve kterých je daný soubor uložen v rámci projektu. Na závěr je vždy uveden přesný název souboru i s příponou. V našem případě jde o soubor „Faktura.rdlc“. Název projektu, jednotlivé složky a název souboru jsou mezi sebou odděleny tečkami. Nutno dodat, že zmíněný soubor „rdlc“ je nutné přidat do projektu pomocí Visual Studia. Postup přidávání existujících tříd již byl v textu zmíněn.

10.3.5. Změna SQL dotazů

  • Pokud se v aplikaci Report Designer objeví tabulka přesně o dvou řádcích, tak po spuštění konzolové aplikace dojde k vygenerování SQL dotazu. Tento dotaz je v externí funkci ovšem nutné upravit, protože Report Designer doplní defaultní tabulku „ng_form“ do dotazu a po kliknutí na tlačítko tisku by došlo k výjimce ohlašující, že tabulka „ng_form“ v databázi neexistuje. Z tohoto důvodu je potřeba projít všechny SQL dotazy v kódu a ujistit se, že všechny tabulky, které jsou uvedeny v kódu, opravdu existují v databázi.

Obrázek.png

10.3.6. Přizpůsobení „TextBoxů“ obsahu pole

  • Obsah vkládaných databázových polí nebo proměnných do „TextBoxu“ může v některých případech přesáhnout definované rozměry (výška a šířka) daného „TextBoxu“. Postup nastavení přizpůsobení „TextBoxů“ je rozdílný pro klasicky vykreslovaný „TextBox“ a „TextBox“ vykreslovaný v tabulce.

10.3.6.1. „TextBox“ vykreslovaný v tabulce

„TextBox“ vykreslovaný v tabulce se pozná podle argumentů, které jsou uvedeny v metodě „pdf.DrawTextBox()“.

Jak je vidět na obrázku níže, jako poslední parametr musí být uveden argument „i“ typu „int“. Defaultně je tento argument nastaven na hodnotu „-1“, ale v případě „TextBoxu“ vykreslovaného v tabulce je hodnota rovna „0“ nebo „1“ (záleží na cyklu procházení položkou). Dále metoda „pdf.DrawTextBox()“ obsahuje argument „Clip“, který je v případě „TextBoxu“ vykreslovaného v tabulce po vygenerování vždy nastaven na hodnotu „false“. V případě „TextBoxu“ vykreslovaného v tabulce je vhodné hodnotu argumentu „Clip“ neměnit a nechat ji nastavenou na hodnotu „false“.

Obrázek.png

10.3.6.2. Atribut „Clip“

Atribut „Clip“ je typu „boolean“. Pokud je argument „Clip“ nastaven na hodnotu „false“, tak je umožněno přetečení definované výšky „TextBoxu“ z Visual Studia. Ve chvíli, kdy obsah daného „TextBoxu“ bude delší, než je šířka definovaného „TextBoxu“, tak se obsah roztáhne na více řádků a výška definovaného „TextBoxu“ se přizpůsobí obsahu „TextBoxu“.

Obrázek.png

10.3.6.3. Metoda „pdf.CheckSpace()“

Obrázek.png

Jak je možné vidět na obrázku výše, v kódu, který zajišťuje vykreslení všech položek uložených k dané faktuře, jsou definovány dvě metody „pdf.CheckSpace()“. Tyto metody zjišťují, jestli náhodou další vykreslovaný prvek nebude svou y-novou souřadnicí mimo kreslící plochu dokumentu. Pokud tomu tak je, tak metody zajistí, že další vykreslovaný prvek bude přesunut na další stránku. Předposlední parametr metody říká, kolik prostoru je potřeba pro zápatí dané stránky. Poslední parametr specifikuje, kolik místa je potřeba vynechat pro záhlaví stránky ve chvíli, kdy dojde ke skoku na další stránku.

První přetížená metoda vedle výše popsané funkcionality zajišťuje i posunutí následujících elementů po y-nové ose podle maximálního přetečení. Jak je možné vidět na obrázku výše, vykreslování jedné položky faktury proběhne ve dvou cyklech. V každém z těchto cyklů je zavolána metoda „pdf.CheckSpace()“. Na obrázku níže je znázorněn příklad rozložení „TextBoxů“ jedné položky. V prvním cyklu je identifikován „TextBox“ s největší hodnotou přetečení definovaného „TextBoxu“ a tato hodnota je uložena do proměnné „MaxOverflow“. Jednotlivá pole dané položky nejsou v prvním cyklu vykreslována. Ve druhém cyklu je všem „TextBoxům“ dané položky nastaven atribut „height“ na hodnotu, která je rovna hodnotě atributu „MaxOverflow“ získaného v prvním cyklu. Přenastavení atributu „height“ zajistí, že všechny pole jedné položky budou mít stejnou výšku a při vykreslování další položky se bude brát v potaz výška předcházející položky, tím pádem se nebudou jednotlivé položky překrývat.

Obrázek.png

Druhá z metod je defaultně zakomentována, protože vyžaduje jako první parametr y-novou souřadnici dalšího objektu umístěného pod tabulkou. V případě potřeby lze danou hodnotu vyčíst z kódu. Druhý případ metody se využije zejména ve chvíli, kdy skončí cyklus procházení jednotlivých položek a je potřeba ověřit, jestli je na stejné stránce ještě místo pro další text dokumentu.

10.3.6.4. Klasicky vykreslovaný „TextBox“

Metoda „pdf.DrawTextBox()“ klasicky vykreslovaného „TextBoxu“ obsahuje méně argumentů než „TextBox“ vykreslovaný v tabulce. Mezi argumenty chybí argument „int i“, který je v případě klasicky vykreslovaného „TextBoxu“ vždy nastaven na hodnotu „-1“. U klasicky vykreslovaného „TextBoxu“ je po vygenerování kódu argument „Clip“ nastaven hodnotu „true“. Tento argument je možné podle potřeby ručně měnit.

Obrázek.png

10.3.6.5. Atribut „Clip“

Atribut „Clip“ je typu „Boolean“. V případě nastavení argumentu „Clip“ na hodnotu „true“ bude výška „TextBoxu“ vykreslena úplně stejně, jako byla navržena v aplikaci Report Designer ve Visual Studiu bez možnosti přetečení. To znamená, že „TextBox“ s obsahem, který přesahuje definovanou šířku „TextBoxu“, bude vykreslen na jeden řádek, a proto v „pdf“ dokumentu nemusí být vykreslen celý obsah daného pole.

Obrázek.png

10.3.6.6. Atribut „MaxOverflow“

Na obrázku níže je vidět způsob, jak zajistit, aby v případě nastavení atributu „Clip“ na hodnotu „false“ u klasicky vykreslovaného „TextBoxu“ došlo k posunu následujících elementů po y-nové souřadnici. Je nutné vynulovat atribut „MaxOverflow“, protože každé zavolání metody „pdf.DrawTextBox()“ nastavuje hodnotu v tomto atributu a je potřeba ji mít vynulovanou před nastavováním posunu následujících elementů.

10.3.6.6.1. Metoda „pdf.MoveTop(double overflow)“

Této metodě je jako argument vložena hodnota atributu „pdf.MaxOverflow“, která je nastavena v metodě „pdf.DrawTextBox()“. Zavoláním metody se zajistí, že v metodě „pdf.DrawTextBox()“ dalšího vykreslovaného prvku dojde k posunu po y-nové ose podle hodnoty „pdf.MaxOverflow“. Pokud by nastal případ, ve kterém by bylo vedle sebe srovnáno více klasicky vykreslovaných „TextBoxů“ s nastavenou hodnotou atributu „Clip“ na „false“, stačí metodu „pdf.DrawTextBox()“ daných „TextBoxů“ vložit mezi nastavení atributu „pdf.MaxOverflow“ a metodu „pdf.MoveTop(pdf.MaxOverflow)“.

Obrázek.png

10.3.6.6.2. Metoda „pdf.CalculateFontSize()“

V případě, že u klasicky vykreslovaného „TextBoxu“ je hodnota atributu „Clip“ nastavena na „true“ (nebude docházet k zalamování řádků) a obsah vkládaného pole nebo proměnné je natolik dlouhý, že se nevejde do definované šířky „TextBoxu“, je k dispozici metoda „pdf.CalculateFontSize(object value, double maxWidth, int size)“, která zajistí snižování definované velikosti písma, dokud se daný obsah nevejde do šířky definovaného „TextBoxu“.

Obrázek.png

10.4. Vytvoření formulářů v NET Geniu

  • Jak již bylo v úvodu napsáno, předpokladem pro vygenerování „pdf“ dokumentu je mít nainstalované NET Genium na lokálním počítači. Postup vytváření formulářů je koncipován pro čisté NET Genium. Pokud je k dispozici již používané NET Genium, záleží, co máte za úkol vytvořit, ale minimálně bod pojednávající o vytvoření tlačítka pro generování tiskové šablony taky využijete. Pro detailní postup vytváření formulářů v NET Geniu lze využít Příručku administrátora.

Zjednodušený postup

  • 1. Otevřít nainstalované NET Genium na lokálním počítači.
  • 2. Vytvořit novou aplikační skupinu „Finance“.
  • 3. Vytvořit novou aplikaci „Vydané faktury“.
  • 4. Vytvořit nové editační formuláře „Vydaná faktura“ a „Položka vydané faktury“.
  • 5. Zkontrolovat nahrané šablony v NET Geniu.
  • 6. Vytvořit novou nahlížecí stránku „Vydané faktury“.

10.4.1. Otevřít NET Genium

  • Ze všeho nejdříve je samozřejmě nejdůležitější si spustit nainstalované NET Genium na lokálním počítači. Jako URL do prohlížeče zadejte „localhost/virtuální adresář NET Genia“. Virtuální adresář byl již vytvořen při instalaci NET Genia.

10.4.2. Vytvořit aplikační skupinu „Finance“

  • Jelikož otevřené NET Genium je čisté, je potřeba nejprve vytvořit aplikační skupinu. Aplikační skupina slouží v NET Geniu k slučování aplikací, které se týkají stejné oblasti. Těmito oblastmi mohou být například finance, marketing, zásoby, atd. Pro potřeby této příručky je vytvořena aplikační skupina „Finance“, lze si ovšem vytvořit aplikační skupinu s libovolným názvem.

10.4.3. Vytvořit novou aplikaci „Vydané faktury“

  • Ve vytvořené aplikační skupině je dále možné vytvářet libovolné množství aplikací. Aplikace by měly být zařazovány do odpovídajících aplikačních skupin. V popisovaném příkladu této příručky byla vytvořena aplikace „Vydané faktury“ v aplikační skupině „Finance“. Stejně jako v případě aplikační skupiny platí, že aplikace může mít libovolný název.

10.4.4. Vytvořit nové editační formuláře „Vydaná faktura“ a „Položka vydané faktury“

  • Pro krátkou demonstraci načítání polí editačního formuláře NET Genia do připravené šablony jsou vytvořeny dva editační formuláře – „Vydaná faktura“ a „Položka vydané faktury“. V editačním formuláři „Vydaná faktura“ je vytvořeno textové pole „Číslo faktury“, které je následně načítáno do šablony pod databázovým identifikátorem „#ng_vydanafaktura#.#ng_cislofaktury#”. V editačním formuláři „Položka vydané faktury“ je také vytvořeno jedno textové pole s názvem „Položka“. Toto textové pole je poté načítáno v šabloně pod identifikátorem „#ng_polozkavydanefaktury#.#ng_polozka#” v tabulce určené pro jednotlivé položky faktury.
    Dále editační formuláře jsou mezi sebou propojeny pomocí vazby přes identifikátory „ng_polozkavydanefaktury.pid = ng_vydanafaktura.id“.
    Pro účely této příručky jsou editační formuláře velice jednoduché. V praxi jsou jednotlivé formuláře o dost složitější, protože obsahují více ovládacích prvků a propojení na ostatní tabulky v databázi.

Vložení „Buttonu“

  • Při vytváření editačního formuláře „Vydaná faktura“ je nutné upozornit na jednu důležitou věc související s generováním šablon. Ovládacím prvkem, který se použije k tvorbě „pdf“ dokumentů, je ovládací prvek „Button“.
  • Tlačítko vložte do editačního formuláře „Vydaná faktura“ na pozici, která je vidět na následujícím obrázku.

Obrázek.png

  • Po vložení zmíněného ovládacího prvku se otevře nastavení „Buttonu“. Jelikož se jedná o tlačítko, které by mělo vykonat nějakou činnost, přejděte po vyplnění povinného pole „Jméno“ na záložku „Události“. V případě, že uživatel chce stisknutím tlačítka vygenerovat „pdf“ dokument, je u nabídky „Server“ nutné vybrat možnost „Tisk do šablony“ a v poslední části okna mít zaškrtnutou možnost „Tisk“, jak je vidět na obrázku níže.

Obrázek.png

  • Dále u prvku s názvem „Šablona“ specifikujte, podle které šablony by měl být vytvořen nový dokument. V nabídce budou všechny soubory, které jsou uloženy ve složce „Templates“ daného NET Genia.
  • Pokud požadovaná šablona není uvedena v nabídce, je nutné soubor přidat do zmíněné složky. Existují dva způsoby, jak toto učinit. Jedním z nich je uložit přímo do složky „Templates“ daného NET Genia „pdf“ soubor například s názvem „Faktura.pdf“. Druhou cestou je nahrání taktéž souboru „Faktura.pdf“ přes systém NET Genium. Pro nahrání šablony do NET Genia je nutné postupovat následovně:
  • Kliknout na záložku „Hlavní stránka“.

Obrázek.png

  • Rozkliknout hlavní menu NET Genia a vybrat možnost „Upravit NET Genium…“ (ozubené kolečko).

Obrázek.png

  • Přejděte na záložku „Tiskové šablony“.
  • Otevře se okno, ve kterém na záložce „Tiskové šablony“ jsou uvedeny všechny uložené šablony v NET Geniu. Stisknutím tlačítka „Procházet…“ je možné nahrát novou tiskovou šablonu. Název tiskové šablony by se měl shodovat s názvem, který byl použit v kódu ve třídě „ngef.cs“ externí funkce.

Obrázek.png

10.4.5. Vytvořit novou nahlížecí stránku „Vydané faktury“

  • Pro potřeby této příručky je vytvořena nahlížecí stránka „Vydané faktury“, která obsahuje nahlížecí tabulku se záznamy všech vydaných faktur. Samozřejmostí je, že uživatel si může vytvářet libovolné množství nahlížecích tabulek, které mohou zobrazovat různé záznamy z databáze.

10.5. Nahrání externí funkce do lokálního NET Genia

10.5.1. Zkompilovat externí funkci

  • Pokud již není v třídách co upravovat, můžete externí funkci zkompilovat pomocí klávesové zkratky „CTRL + SHIFT + B“. Zkompilováním se zajistí dvě věci. Zaprvé dojde ke zkontrolování, jestli v kódu nejsou nějaké syntaktické chyby.
  • Ve Visual Studiu existují dva módy „Debug“ a „Release“. Mód „Debug“ je určen pro testování, protože po zkompilování externí funkce vytvoří vedle souboru s koncovkou „dll“ ještě jeden soubor s příponou „pdb“. Ve chvíli, kdy dojde při běhu externí funkce k chybě, soubor s příponou „pdb“ určí přesně řádek externí funkce, kde k té chybě došlo. Přepínat mezi módy lze v nabídce hned pod hlavním menu Visual Studia. Každý ze zmíněných módů má svou vlastní složku, do které jsou ukládány zkompilované externí funkce.

Obrázek.png

10.5.2. Nahrát novou verzi externí funkce do NET Genia

  • Po otevření programu Total Commander pod právy administrátora se soubor „dll“ vytvořený kompilací externí funkce nahraje do adresáře „bin“ daného NET Genia. Na obrázku níže je vidět, že externí funkce byla zkompilována v módu „Debug“. Z tohoto důvodu došlo i k vygenerování souboru s příponou „pdb“, a proto je možné do NET Genia spolu se souborem s koncovkou „dll“ nahrát i „pdb“ soubor.

Obrázek.png

10.5.3. Aktualizovat NET Genium

  • Nyní je již možné novou funkčnost externí funkce otestovat. V otevřeném NET Geniu stiskněte klávesu „F5“, kterou dojde k aktualizaci NET Genia.

10.5.4. Zadání přihlašovacích údajů

  • Po aktualizaci bude systém vyžadovat znovu zadání přihlašovacích údajů.

10.5.5. Otevřít nahlížecí stránku „Vydané faktury“

  • Pro vytisknutí dokumentu „Faktura.pdf“ otevřete editační formulář nějaké konkrétní vydané faktury. Již uložené záznamy se otevírají pomocí nahlížecích stránek. Konkrétně pro případ naší příručky je nutné otevřít nahlížecí stránky „Vydané faktury“. U každého ze záznamů je ikona tužky, kterou lze editační formulář daného záznamu otevřít.

Obrázek.png

10.5.6. Otevřít vybraný záznam vydané faktury a stisknout tlačítko „Faktura“

  • Stisknutím ikony tužky u vybraného záznamu v nahlížecí tabulce „Vydané faktury“ se otevře editační formulář vybraného záznamu. Pro vygenerování tiskové šablony „Faktura.pdf“ stiskněte tlačítko „Faktura“, které zajistí vygenerování tohoto „pdf“ dokumentu.

Obrázek.png

  • Po stisknutí vyskočí pop-up okno, pomocí kterého dojde ke stažení „pdf souboru“.

Obrázek.png

  • Záleží na prohlížeči, ve kterém je NET Genium spuštěné. Například v prohlížeči Mozzila Firefox dojde rovnou ke stažení „pdf“ dokumentu, v prohlížeči Google Chrome se vygenerovaný dokument otevře v nové záložce prohlížeče. Ve všech případech by ovšem vygenerovaná šablona měla vypadat stejně.

Obrázek.png

  • Dokud se uživatel nepřesune někam jinam v systému, tak v editačním formuláři daného záznamu bude neustále připraven vygenerovaný dokument „Faktura.pdf“ ke stažení. Není potřeba znovu nechat NET Genium vygenerovat stejný „pdf“ dokument znovu.

Obrázek.png