Přejít k navigační liště

Zdroják » Různé » Změňte své stránky na elektronickou knihu

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

Články Různé

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.

Komentáře

Subscribe
Upozornit na
guest
13 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Irena

Docela by se hodilo pod všemi články tlačítko Poslat na Kindle. Zatím to řeším na tři kliknutí přes Instapaper.

David Slížek

Taky mě to napadlo :-) Našel jsem zatím jen zprávu o pluginu, který umožňuje posílání pro WordPress: http://wpmu.org/send-wordpress-posts-and-pages-to-your-amazon-kindle-for-free/

Timy

O trochu jednodušší by měl být Kindler http://kindler.michalsvec.cz/

David

Lze automaticky generovat *.mobi z webových stránek? Například pomocí php?

amazon-kindle.cz

K tomuto článku jsem připravil balíček s praktickou ukázkou generování knihy ve formátu Mobi a článek ve kterém odkazuji na zajímavé nástroje. Více na adrese: http://www.amazon-kindle.cz/2-dil-jak-si-pripravit-elektronickou-knihu-pro-amazon-kindle-ve-formatu-mobi-prakticka-ukazka/

josefrichter

A je tohle ta správná cesta? Když už autor zmiňuje to zlaté webdesignerské pravidlo „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.“

Proč teda vlastně připravovat velmi specifický formát pro velmi specifické zařízení jako je Kindle? Neměl bych se snažit o nějaký relativně flexibilní layout, ale zbytek práce nechat na browseru konkrétního zařízení? Abychom nakonec kromě verzí pro IE6, IE7+8, IE9+ a WebKit+Firefox nakonec nedělali ještě další pro Kindle, iPad, Galaxy Tab, iPhone, atd. atd. Nepodbízím odpověď, ptám se na váš názor.

Timy

Já si myslím, že Vámi popsaný postup je obecně správný, ale v praxi může narážet na nějaké limity. Například pokud bych si chtěl uložit do Kindlu nějaký článek i s obrázky, musel bych si uložit jak zdrojové HTML, tak i ty obrázky a v Kindlu bych měl nepořádek. A hlavně — v HTML nemusím být schopen popsat vše, co mi nabízí formát mobi (například pagebreak).

mejp

Zrovna zalozeni stranky neni v HTML problem :-) (krome toho to delaji i znacky H1/H2)

PMD

Autor to jistě ví, ale hodí se upřesnit, že e-ink není černobílé LCD, a není to ani starší technologie než LCD. E-ink byl vytvořen speciálně pro svou nízkou spotřebu, tloušťku a hlavně pro příjemné čtení dlouhých textů.
Pokud někomu vadí, že to není barevné, podle mě neimplikuje černobílé~zas­taralé, ale především nepochopil, že Kindle není univerzální tablet, ale čtečka knih.

Nabla

Tak nevim, mam Kindle novy, moc se v tom jeste neorientuju.
Zkousim pomoci kindlegen prevest html ktere jsem si sosnul pomoci wget, nechal jsem zkonvertovat linky, takze ted mam kus webu lokalne na disku, hyperlinky v browseru chodi, proste stazene stranky. Ma to prvni rekneme index.html a v nem jsou jen hyperlinky na dalsi fajly (takovy obsah).
Kindlegen me serve ze pry Warning(prcgen): Hyperlink not resolved
a to na vsech (funkcnich) linkach v celem obsahu… to nechapu…

lulu

Hyperlink not resolved znamená že nemáš odkaz v *.opf
vygeneruj si jej utilitou http://www.uloz.to/7583351/gui-pro-kindlegen-zip

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.