Změňte své stránky na elektronickou knihu

Mnozí z nás se stali v majiteli čtečky Kindle – a pokud ne my, tak mnozí naši čtenáři či uživatelé našich webů. Je tedy na místě zabývat se možností, jak nabídnout náš obsah pro jejich čtečku. V článku si ukážeme, jak vygenerovat „e-book“ z čistého HTML, které máme v redakčním systému stejně už po ruce.

Autorská předmluva: Autor by rád zdůraznil, že je majitelem čtečky Kindle, a proto se věnuje v článku právě vytváření dokumentů pro tuto čtečku; jiné nezmiňuje proto, že s nimi nemá zkušenosti, nikoli proto, že by neexistovaly nebo proto, že je proti nim zaujatý. Rovněž by rád podotkl, že pro účely tohoto článku nepovažuje za důležité rozebírat obchodní aj. politiku společnosti Amazon.

Vytvořit dokument pro čtečku Kindle je jednodušší, než se může zdát – obzvlášť pro čtenáře, kteří mají zkušenost s vytvářením webů.

Před nedávnem jsme si připomínali zlaté webdesignérské pravidlo, totiž že HTML kód by měl být napsaný bez nějakých implicitních předpokladů stran toho, jaké zařízení čtenář použije. To znamená především nespoléhat se na to, že jeho zařízení má nějaké rozměry nebo nějakou velikost písma či že text zalomí vždy stejně. U e-booků využijeme toto pravidlo dosytosti.

Obecně

Autor dostává často otázku: „Kindle? Děláš si legraci? Kdo by chtěl číst knížky na černobílém zařízení? Dneska…?“ Technickým nadšencům se může zdát divné, že by někdo chtěl úmyslně používat „starší“ technologii (starší implikuje horší, nedostatečnou a špatnou). Proč by někdo chtěl dělat černobílé fotografie, když máme barevné, proč by někdo chtěl lampový zesilovač, když máme tranzistory a IO, proč by někdo používal gramofon, černobílou TV… a tak dál. Fotografové vědí, že černobílý materiál má unikátní vlastnosti a fotografiím dodá specifickou atmosféru, muzikanti slyší, že lampový zesilovač má jiný zvuk, který žádnými tranzistory ani integrovanými zesilovači nenapodobí, DJ ví, že z cédéček mixovat nelze, a tak dál. Zkrátka nelze říct, že je některá technologie špatná a zastaralá, pokud nedodáme kontext, tedy účel. Černý text na bílém pozadí je pro čtení knih zatím ve většině případů stále to nejlepší – a nejde jen o cenu barevného tisku. Barevný tisk se hodí na publikace o umění s barevnými fotografiemi, ale na román či odbornou knihu…?

Kindle používá formát AZW, což je upravený formát MOBI, rozšířený o DRM. To nechme stranou – Amazon jej nenabízí volně, pouze při prodeji přes svůj obchod, ostatním je nedostupný. Někteří vydavatelé mohou mít z nemožnosti použít DRM noční můry, nakonec se ale ukáže, že sebelepší DRM jim zisky nezvýší – ale to je na jinou diskusi, pro nás je v tuto chvíli důležité vědět, že potřebujeme své dokumenty vyexportovat do formátu MOBI.

Vlastní distribuce zájemcům může být realizována formou mailing listu, do něhož se zájemci přihlásí svými Kindle maily (každé zařízení má vlastní mailovou adresu; cokoli zaslaného na tuto adresu je doručeno do Kindlu, pokud je odesilatel v seznamu povolených). Stačí pak zasílat mail, a v příloze přiložit vygenerovaný MOBI.

Jak vygenerovat .mobi?

Existuje několik způsobů, jak vygenerovat .mobi – pro většinu bude pravděpodobně nejschůdnější použít řádkovou utilitu Kindlegen – Amazon ji nabízí pro Win i Lin. Autorem je společnost Mobipocket, takže nepřekvapí, že je téměř totožná s jejich nástroji „mobigen“ a „prcgen“. Bohužel nedodává zdrojový kód, ortodoxní zastánci open source si budou muset najít vhodnou alternativu sami – což by neměl být až takový problém (viz např. mobiperl), protože v zásadě jde jen o určitým způsobem zabalené XHTML.

XHTML?

Ano, uvnitř MOBI je text uložen ve starém dobrém XHTML, rozšířeném o některé možnosti. Obsah je komprimovaný (LZ77, nověji i Huffmanovým algoritmem). Bližší informace o formátu můžete nalézt v popisu.

Protože je MOBI v zásadě jen „zabalené HTML“, je snadné jej z HTML vygenerovat. Přesto není vhodné předhodit konverzní utilitě plnou webovou stránku tak, jak ji posíláme prohlížeči, ale je na místě ji trochu pročistit, podobně jako když ji např. připravujeme pro mobilní zařízení.

Pravidla čistého HTML kódu

Když se podíváte na většinu HTML stránek, zjistíte, že jsou nafouklé spoustou nezbytných tagů, kterým rozumí prohlížeč, a spoustou obsahu, který ocení návštěvník webové stránky s prohlížečem v počítači, ale čtenáři s čtečkou bude nanic (navigace v rámci webu, animované menu, patičky, hlavičky, boxy, reklama, počítadla, …) Všechno tohle je dobré ze stránky vyhodit dřív, než ji necháme zpracovat generátorem .mobi souborů. Pro generování používejte POH – Plain Old HTML.

Ideálním materiálem tak je např. databáze článků redakčního systému, v níž je surové HTML s obsahem, nebo výstup z generátoru typu Texy či Markdown.

Při tvorbě XHTML je dobré držet se několika pravidel, která budou důvěrně známá mnohým webdesignérům. Několik si jich vyjmenujeme, kompletní seznam nalezne zájemce v Publishing Guidelines.

Prostý text je prostý text

„Maso“ dokumentu, tedy text odstavců, nijak nestylujte. Nechte na uživateli zařízení, aby si jej zobrazil tak, jak jemu vyhovuje. Nepředepisujte font, velikost písma ani barvy. Nechte ho prostý!

Každý odstavec má odsazený první řádek; chcete-li to zrušit, použijte styl text-indent:0 (podpora CSS je ale jen velmi omezená, pokud narazíte na nějaký problém, použijte inline styly).

Nečíslujte stránky

Nevíte, kolik textu se vejde na obrazovku zařízení, takže nemůžete ani vědět, kde stránka končí a kde začíná další. Proto se nepokoušejte stránky číslovat.

Page break

Pokud potřebujete odstránkovat, použijte tag <mbp:pagebreak/>. Žádné vkládání mnoha prázdných řádků ani HR.

Definujte kódování

Pokud se chcete vyhnout rozsypaným čajům, vždy uveďte kódování. UTF-8 by měla být bezproblémová vol­ba.

Generujeme

Jakmile máme připravený XHTML soubor, můžeme z něj snadno vytvořit MOBI utilitou kindlegen.

kindlegen soubor.html

Výsledkem bude, nepřekvapivě, soubor.mobi, který bude obsahovat totéž co soubor.html, ale ve formátu vhodném pro čtečku Kindle. (Takto je např. možné převádět wordovské dokumenty – exportovat je jako „stránka HTML, zjednodušená“ a pustit na ni Kindlegen.)

Pokud zdrojový soubor html obsahuje obrázky, bude je kindlegen hledat v zadaném umístění. Vhodné je nahrát všechny do stejného adresáře s html a uvést jejich jména přímo v <img src="">  bez jakékoli cesty – při testech se tento postup autorovi osvědčil nejvíc.

Málokdy se podaří, aby celá publikace byla jeden soubor XHTML. Navíc je často záhodno dát celému dokumentu některé věci navíc, jako třeba systémovou navigaci či titulní obrázek. V takových případech budeme potřebovat OPF.

OPF

OPF (Open Packaging Format) je formát založený na XML, v němž lze určit „metainformace“ k připravovanému dokumentu. Lze specifikovat autora, ISBN, vydavatele, pomocí něj určíte, jaké soubory mají být do výsledného .mobi zahrnuty, v jakém pořadí, můžete specifikovat HTML soubor s obsahem, můžete definovat několikaúrovňový obsah (Navigation – formát NCX) a další věci. Kompletní popis tohoto formátu přesahuje rámec tohoto článku.

Pro začátek je potřeba vědět, že chceme-li udělat publikaci s obrázkem, obsahem a rozdělenou do kapitol, musíme to vše specifikovat v souboru formátu opf. Jak takový soubor může vypadat, ukazuje následující příklad:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
 
    <dc:title>Moje kniha</dc:title>
    <dc:language>cs</dc:language>
    <meta name="cover" content="My_Cover" />
    <dc:identifier id="BookId" opf:scheme="ISBN">1234-5678</dc:identifier>
    <dc:creator>centrum.cz</dc:creator>
    <dc:publisher>centrum.cz</dc:publisher>
    <dc:subject>Kniha</dc:subject>
    <dc:date></dc:date>
  <dc:description>Moje kniha</dc:description>
</metadata>
<manifest>
  <!-- HTML content files [mandatory] -->
    <item id="item1" media-type="application/xhtml+xml" href="art0.html"></item>
    <item id="item2" media-type="application/xhtml+xml" href="art1.html"></item>
    <item id="item3" media-type="application/xhtml+xml" href="art2.html"></item>
    <item id="item4" media-type="application/xhtml+xml" href="art3.html"></item>
    <item id="item5" media-type="application/xhtml+xml" href="art4.html"></item>
    <item id="item6" media-type="application/xhtml+xml" href="art5.html"></item>
    <item id="item7" media-type="application/xhtml+xml" href="art6.html"></item>
    <item id="item8" media-type="application/xhtml+xml" href="art7.html"></item>
    <item id="item9" media-type="application/xhtml+xml" href="art8.html"></item>
    <item id="item10" media-type="application/xhtml+xml" href="art9.html"></item>
    <item id="item11" media-type="application/xhtml+xml" href="art10.html"></item>
    <item id="item12" media-type="application/xhtml+xml" href="art11.html"></item>
    <item id="item13" media-type="application/xhtml+xml" href="art12.html"></item>
    <item id="item14" media-type="application/xhtml+xml" href="art13.html"></item>
    <item id="toc" media-type="application/xhtml+xml" href="toc.html"></item>
   
  <!-- table of contents [mandatory] -->
  <item id="My_Table_of_Contents" media-type="application/x-dtbncx+xml" href="navigace.ncx"/> 
  <!-- cover image [mandatory] -->
  <item id="My_Cover" media-type="image/jpeg" href="cover.jpg"/>
</manifest>
<spine toc="My_Table_of_Contents">
  <!-- the spine defines the linear reading order of the book -->
    <itemref idref="toc"/>
    <itemref idref="item1"/>
    <itemref idref="item2"/>
    <itemref idref="item3"/>
    <itemref idref="item4"/>
    <itemref idref="item5"/>
    <itemref idref="item6"/>
    <itemref idref="item7"/>
    <itemref idref="item8"/>
    <itemref idref="item9"/>
    <itemref idref="item10"/>
    <itemref idref="item11"/>
    <itemref idref="item12"/>
    <itemref idref="item13"/>
    <itemref idref="item14"/>
</spine>
   
<guide>
    <reference type="toc" title="Table of Contents" href="toc.html"></reference>
    <reference type="text" title="Welcome" href="art0.html"></reference>
</guide>
</package>

Jednotlivé kapitoly máme v HTML souborech artX.html, v souboru toc.html máme jednoduchý rozcestník – seznam s odkazy na jednotlivé soubory (prosté <a href="art0.html">…)

Soubor .ncx sice specifikace opf označuje za mandatory, ale pokud jej při testování vynecháte, vygeneruje se výsledek i tak. NCX můžete vygenerovat třeba najednou s generováním toc.html – obsah je de facto totožný, jen formát je jiný (NCX je opět založen na XML). Viz též podrobnosti o vytváření NCX souborů.

Máte-li připravený OPF, můžete spustit převod:

kindlegen soubor.opf

Utilita vás upozorní na případné chyby a problémy – nejčastěji „malý titulní obrázek“; doporučená velikost je 600×800px, pokud je kratší strana obrázku menší než 500px, konverzní utilita jej odmítne.

V XHTML by mělo být možné použít i rámy a přidat tak k obsahu např. navigaci, či specifikovat indexy a slovníky pojmů. Podle doporučení je možné do dokumentů vložit i audio či video, ale to autor netestoval.

Postup práce

Jak tedy publikovat obsah vašeho webu ve formátu .mobi? Uvedeme si postup v obecných bodech:

  1. Připravíme si text, rozdělený na logické úseky (kapitoly, články…) ve formátu HTML
  2. Vypustíme vše nepotřebné, odstraníme nadbytečné formátování, ponecháme jen to základní: zvýraznění, odkazy, obrázky, tabulky…
  3. Připravíme si kapitoly jako XHTML soubory
  4. Připravíme si obrázky (nemusíme nijak zvlášť upravovat, konverzní rutina si je upraví)
  5. Vygenerujeme si stránku se seznamem kapitol (guide) ve formátu HTML
  6. Vygenerujeme NCX soubor s obsahem
  7. Vytvoříme OPF soubor, v němž bude vše výše uvedené
  8. Spustíme kindlegen
  9. výsledný .mobi soubor můžeme distribuovat mailem předplatitelům či dát ke stažení

Hodně štěstí při vlastním experimentování!

Poznámka: Autor použil uvedený postup ve své knihovně, popsané v článku na jeho osobním webu.

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 13

Přehled komentářů

Irena Poslat na Kindle
David Slížek Re: Poslat na Kindle
Timy Re: Poslat na Kindle
David A co automatické generování?
Martin Malý Re: A co automatické generování?
amazon-kindle.cz Připravil jsem praktickou ukázku a článek s tipy jak testovat knihy
josefrichter filozofická otázka
Timy Re: filozofická otázka
mejp Re: filozofická otázka
Martin Malý Re: filozofická otázka
PMD Kdo by chtěl číst knížky na černobílém zařízení? Dneska…?
Nabla Tak nevim
lulu Re: Tak nevim
Zdroj: https://www.zdrojak.cz/?p=3399