Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc

Víkendová rychlovka–tisk kartiček

Mé školou povinné děti se učí angličtinu. Což znamená učit se slovíčka. Mají slovníčky, jenže ty mají některé nevýhody – například se často naučíte slovíčka v nechtěném kontextu ostatních slov, tedy nakonec je umíte pěkně vyjmenovat v řadě, ale otázka na nahodilé slovíčko zůstane bez odpovědi. A nebo se špatně zvýrazňují obtížná slovíčka, aby jste si je mohli častěji opakovat.

 

Jistou naději jsem vkládal do elektronických pomůcek  - jenže chytrý mobil sloužil všemu možnému, jen ne na opakovaní slovíček a tak putoval pryč. Jedinou možností se tak jeví klasické papírové kartičky – jenže jejich příprava bere čas, obzvláště pokud by jste si je měli sami psát. Nutné je také zmínit, že na rozdíl od aplikaci jako AnyMemo jsou kartičky zcela tiché a slovíčko vám tedy nepřečtou.

 

Dal jsem tedy dohromady slovíčka na listu v sešitě Excel, stáhnul knihovnu iTextSharp a udělal aplikaci, která si údaje z Excelu načte a vytvoří PDF s kartičkami – ty stačí pak již jen vytisknout, rozstříhat a učit se, učit se, učit se (© Lenin).

 

Excel Sheet jako vstup

Formát informací je jednoduchý – slovíčko, přepis výslovnosti, příklad použití, český význam a překlad příkladu – vše na listě s názvem Sheet1 (pokud se list jmenuje jinak, musí se upravit příkaz pro načtení v programu) . Excel sheet pak vypadá  takto:

image

Poznámka – lze samozřejmě použít i jiný formát, ale musí se pak upravit aplikace – není to těžké. Použit je Excel 2010.

 

iTextSharp

Tuhle levnou, protože zadarmo, knihovnu na tvorbu PDF naleznete na této adrese. Trochu času zabralo přijít na nejlepší a nejjednodušší způsob vykreslení kartiček – nakonec každou kartičku vykresluji jako tabulku na určité pozici. Výhodou tabulek je možnost určit jak font použitý na obsah buňky, tak i pozadí buňky, její velikost a ohraničení. Obsah lze i otočit a lze tak dosáhnout možnosti přetáčet kartičky po delší straně s obráceným textem.

Vzhledem k tomu, že jsme v Evropě, tiskne se na papír A4, s okrajem 10mm (výsledné pédéefko by tedy mělo jít vytisknout na jakékoliv tiskárně):

image

Vlastní aplikace je velmi jednoduchá – otevře se Excel soubor a z něj se načítají data – to se odehrává v metodě ReadAndPrintExcelSheet. Ta načítá údaje ze sešitu a vytváří jednoduché objekty pro obě strany kartiček (objekty tříd ForeignFlashcardContent a NativeFlashcardContent). Ty pak vloží do pole na správné místo (aby při tisku na obě strany se obě strany kartiček správně “slicovaly”). Jakmile je načten dostatečný počet kartiček pro tisk stránky (v mém případě se tiskne 8 řádků po 4 sloupcích, tedy dohromady 32 kartiček), zavolá se vlastní “tisk” do PDF. Pro každý načtený údaj zhotovena kartička (metody  CreateForeignFlashcard a CreateNativeFlashcard) a ta je umístněna na stránku (metoda PrintFlashCardPage).  A to je vše.

Abych nemusel počítat body při generování PDF, je zde metoda mmToDots, která zadanou míru v milimetrech převede na počet bodů, se kterým metody iTextSharp knihovny pracují.

Abych mohl vykreslovat speciální znaky (hlavně u výslovnosti), používám jaké základ všech písem v dokumentu font Arial:

BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(@"C:/Windows/Fonts/ARIAL.TTF", BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED);

Celý kód je napsán prakticky jen ve statických metodách – nehledejte tam žádné architektonické kouzla a čáry, je to prostě jednoduchá a jednoúčelová aplikace, která ovšem udělá co má: kartičky.

Umístnění vstupního Excel souboru je v app.config – celý program lze samozřejmě upravit na čtení jména souboru z příkazové řádky apod. – každopádně nezapomeňte :

app.config
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.     <connectionStrings>
  4.         <add name="Excel" connectionString="Dsn=Excel Files;dbq=D:\Slovicka.xlsx;driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
  5.     </connectionStrings>
  6. </configuration>

a výstupní Flashcards.pdf pak naleznete ve svých dokumentech díky tomuto příkazu:

  1. PdfWriter writer = PdfWriter.GetInstance(pdfDocument,
  2.                                          new FileStream(
  3.                                             Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
  4.                                                         "Flashcards.pdf"),
  5.                                             FileMode.Create));


A toto je “hardwarový” výstup celého programu:

IMG_7305

 

Zdrojový kód je  přiložen včetně použitého xlsx souboru v balíčku zip.

Zveřejněno Sunday, December 11, 2011 4:39 PM by mstr
Vedeno pod: ,

Attachment(s): Flashcards.zip

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Komentář

# re: Víkendová rychlovka–tisk kartiček

Určitě užitečné, ale nejvíc by mne potěšily hotové Excel soubory. Protože to je největší otrava - přepisovat to z učebnice. Ideální by byl nějaký website, kde by byla nějaká sbírka hezky podle "učebnice/lekce"...

A ideálně i pro němčinu a další jazyky.

Sunday, December 11, 2011 9:42 PM by rob

# re: Víkendová rychlovka–tisk kartiček

Většinou lze najít minimálně seznam slovíček - IMHO není pak zase takový velký problém udělat si utilitku, která ke slovíčkům najde význam, příklady a výslovnost a vygeneruje Excel či jiný obecně použitelný formát. Je tam sice pořád určitá práce, ale to k učení patří. On line slovníků a překladačů je dost a zdarma.

A nebo jsou aplikace, které nabízejí rovnou hotové seznamy - namátkou třeba Keepinhead, Memostation apod.

Sunday, December 11, 2011 11:11 PM by mstr

# re: Víkendová rychlovka–tisk kartiček

Jasne, ze aplikaci je mrak. Ale mne slo o presny seznam slovicek z konkretnich ucebnic - presneji z tech co se ucej moje deti. A to protoze odmitaj se ucit cokoliv co neni v Lekci 1 az 7 :-)

Sunday, December 11, 2011 11:50 PM by rob

# re: Víkendová rychlovka–tisk kartiček

Pěkné, poučné ... ale neodpustím si otázku? Mailmerge ve wordu by to nezvládl?

Monday, December 12, 2011 8:56 AM by Honza

# re: Víkendová rychlovka–tisk kartiček

ad Honza: nevím, nezkoušel jsem. Tipl bych si, že ano, ale musel by jste vyřešit tisk líce a rubu kartičky a otočení kartičky na rubové straně o 180 stupňu, aby ji šlo v ruce otáčet kolem delší hrany. Uživatel by musel mít Word (sice používám Excel pro vstup dat, ale nahradit to čímkoliv jiným je snadné).

Tady máte PDF, tisknutelné kdekoliv a přenosné kamkoliv, program je víceméně jasný a upravitelný.

Který přístup je výhodnější by snad šlo zjistit jen vyzkoušením Mailmerge, ale vzhledem k tomu, že mám co jsem chtěl, nehodlám to zkoušet a řešit/hledat řešení výše uvedených věcí.

Monday, December 12, 2011 9:22 AM by mstr

# re: Víkendová rychlovka–tisk kartiček

Very good site many thanks!

Wednesday, January 11, 2012 12:07 PM by canvas art

Vytvoření nového komentáře

(povinný) 
povinný 
(povinný) 
Opiš čísla, která vidíš na obrázku: