Dokumentace API pro nástroje pro úpravu e-knih¶
Nástroje pro úpravu e-knih se skládají z objektu calibre.ebooks.oeb.polish.container.Container, který představuje knihu jako kolekci souborů HTML a zdrojů a různých nástrojů, které lze použít k provádění operací na kontejneru. Všechny nástroje jsou ve formě funkcí na úrovni modulů v různých modulech calibre.ebooks.oeb.polish.*.
Objekt kontejneru pro knihu v cestě získáte takto:
from calibre.ebooks.oeb.polish.container import get_container
container = get_container('Path to book file', tweak_mode=True)
Pokud píšete modul pro Editor e-knih, získáte aktuální kontejner pro upravovanou knihu takto:
from calibre.gui2.tweak_book import current_container
container = current_container()
if container is None:
report_error # No book has been opened yet
Objekt kontejneru¶
- class calibre.ebooks.oeb.polish.container.Container(rootpath=None, opfpath=None, log=<calibre.utils.logging.Log object>, clone_data=None)[zdroj]¶
Kontejner představuje otevřenou e-knihu jako složku plnou souborů a soubor OPF. Existují dva důležité koncepty:
Kořenová složka. Je základem e-knihy. Všechny soubory e-knihy jsou uvnitř této složky nebo v jejích podsložkách.
Názvy: Jsou to cesty k souborům knihy relativní ke kořenové složce. Vždy obsahují oddělovače POSIX a nejsou URL-kódované. Lze je chápat jako kanonické identifikátory souborů v knize. Většina metod objektu kontejneru pracuje s názvy. Názvy jsou vždy v normalizační formě Unicode NFC.
Klony: objekt kontejneru podporuje efektivní klonování na disku, které se používá k implementaci kontrolních bodů v editoru e-knih. Aby to fungovalo, nikdy byste neměli k souborům v souborovém systému přistupovat přímo. Místo toho použijte
raw_data()neboopen()pro čtení komponentních souborů v knize nebo zápis do nich.
Při převodu mezi hodnotami href a názvy používejte metody poskytované touto třídou; předpokládají, že všechny hodnoty href jsou URL-kódované.
- abspath_to_name(fullpath, root=None)[zdroj]¶
Převede absolutní cestu na kanonický název relativní k
root- Parametry:
root – Základní složka. Ve výchozím nastavení se použije kořen tohoto objektu kontejneru.
- add_file(name, data=b'', media_type=None, spine_index=None, modify_name_if_needed=False, process_manifest_item=None, suggested_id='')[zdroj]¶
Přidá soubor do tohoto kontejneru. Záznamy pro soubor se automaticky vytvoří v manifestu OPF a ve spine (pokud je soubor textový dokument)
- add_name_to_manifest(name, process_manifest_item=None, suggested_id='')[zdroj]¶
Přidá do manifestu záznam pro soubor se zadaným názvem. Vrátí ID manifestu.
- add_properties(name, *properties)[zdroj]¶
Přidá zadané vlastnosti k položce manifestu identifikované názvem.
- apply_unique_properties(name, *properties)[zdroj]¶
Zajistí, že zadané vlastnosti budou nastavené pouze u položky manifestu identifikované názvem. Jako název můžete předat None, chcete-li vlastnost odebrat ze všech položek.
- book_type = 'oeb'¶
Typ knihy (epub pro soubory EPUB a azw3 pro soubory AZW3)
- commit(outpath=None, keep_parsed=False)[zdroj]¶
Zapíše všechny změněné parsované objekty do souborového systému a uloží soubor e-knihy do umístění outpath.
- Parametry:
output – Cesta, do které se má zapsat uložený soubor e-knihy. Pokud je None, použije se cesta původního souboru knihy.
keep_parsed – Pokud je True, parsované reprezentace zapsaných položek se ponechají v cache.
- commit_item(name, keep_parsed=False)[zdroj]¶
Zapíše parsovaný objekt na disk (serializuje se a zapíše do podkladového souboru). Pokud je
keep_parsedTrue, parsovaná reprezentace se zachová v cache. Viz také:parsed()
- exists(name)[zdroj]¶
True právě tehdy, když existuje soubor nebo složka odpovídající kanonickému názvu. Pamatujte, že tato funkce podléhá omezením podkladového souborového systému operačního systému, zejména citlivosti nebo necitlivosti na velikost písmen. Na souborovém systému nerozlišujícím velikost písmen proto vrátí True i tehdy, když se velikost písmen v názvu liší od velikosti písmen v podkladovém souboru souborového systému. Viz také
has_name()
- filesize(name)[zdroj]¶
Vrátí velikost v bajtech souboru reprezentovaného zadaným kanonickým názvem. Automaticky zpracuje změněné parsované objekty. Viz také:
parsed()
- generate_item(name, id_prefix=None, media_type=None, unique_href=True)[zdroj]¶
Přidá do manifestu položku s href odvozeným od daného názvu. Automaticky zajistí jedinečnost href a id. Vrátí vygenerovanou položku.
- get_file_path_for_processing(name, allow_modification=True)[zdroj]¶
Podobné jako open(), s tím rozdílem, že místo otevřeného objektu souboru vrací cestu k souboru.
- property guide_type_map¶
Mapování typu průvodce na kanonický název
- has_name(name)[zdroj]¶
Vrátí True právě tehdy, když existuje soubor se stejným kanonickým názvem, jako byl zadán. Na rozdíl od
exists()tato metoda vždy rozlišuje velikost písmen.
- href_to_name(href, base=None)[zdroj]¶
Převede href (relativní k base) na název. base musí být název nebo None; v takovém případě se použije self.root.
- insert_into_xml(parent, item, index=None)[zdroj]¶
Vloží položku do rodičovského prvku (nebo ji připojí na konec, pokud je index None) a opraví odsazení. Funguje pouze se samozavíracími položkami.
- is_dir = False¶
Pokud tento kontejner představuje rozbalenou knihu (adresář)
- iterlinks(name, get_line_numbers=True)[zdroj]¶
Iteruje přes všechny odkazy v name. Pokud je get_line_numbers True, vrací výsledky ve tvaru (link, line_number, offset). line_number je číslo řádku, na kterém se odkaz vyskytuje, a offset je počet znaků od začátku řádku. Pamatujte, že pokud offset není nula, může ve skutečnosti zahrnovat několik řádků.
- make_name_unique(name)[zdroj]¶
Zajistí, že name v této knize ještě neexistuje. Pokud existuje, vrátí upravenou verzi, která neexistuje.
- property manifest_id_map¶
Mapování ID manifestu na kanonické názvy
- manifest_items_of_type(predicate)[zdroj]¶
Názvy všech položek manifestu, jejichž media-type odpovídá predikátu. predicate může být množina, seznam, řetězec nebo funkce přijímající jeden argument, která bude zavolána s hodnotou media-type.
- manifest_items_with_property(property_name)[zdroj]¶
Všechny položky manifestu, které mají zadanou vlastnost
- property manifest_type_map¶
Mapování media-type manifestu na seznam kanonických názvů daného media-type
- property mi¶
Metadata této knihy jako objekt Metadata. Pamatujte, že tento objekt se vytváří za běhu pokaždé, když je tato vlastnost vyžádána, proto ji používejte střídmě.
- name_to_href(name, base=None)[zdroj]¶
Převede název na href relativní k parametru base, který musí být názvem nebo None; v takovém případě se jako base použije self.root
- property names_that_must_not_be_changed¶
Množina názvů, které se nikdy nesmí přejmenovat. Závisí na formátu souboru e-knihy.
- property names_that_must_not_be_removed¶
Množina názvů, které se nikdy nesmí z kontejneru odstranit. Závisí na formátu souboru e-knihy.
- property names_that_need_not_be_manifested¶
Množina názvů, které mohou v manifestu chybět. Závisí na formátu souboru e-knihy.
- open(name, mode='rb')[zdroj]¶
Otevře soubor určený hodnotou name pro přímé čtení nebo zápis. Pamatujte, že pokud je soubor označený jako změněný, zapíše ho a odstraní ho z cache parsování. Než znovu přistoupíte k jeho parsované verzi, musíte práci s tímto souborem dokončit, jinak dojde k problémům.
- property opf¶
Parsovaný soubor OPF
- opf_get_or_create(name)[zdroj]¶
Pomocná metoda, která vrátí první prvek XML se zadaným názvem, nebo ho vytvoří pod prvkem opf:package a poté ho vrátí, pokud ještě neexistuje.
- property opf_version¶
Verze nastavená v prvku <package> souboru OPF
- property opf_version_parsed¶
Verze nastavená v prvku <package> souboru OPF jako n-tice celých čísel
- opf_xpath(expr)[zdroj]¶
Pomocná metoda pro vyhodnocení výrazu XPath nad souborem OPF; má předdefinované předpony jmenných prostorů opf: a dc:.
- parsed(name)[zdroj]¶
Vrátí parsovanou reprezentaci souboru zadaného pomocí name. U souborů HTML a XML se vrátí strom lxml. U souborů CSS se vrátí šablona stylů css_parser. Pamatujte, že parsované objekty se kvůli výkonu ukládají do cache. Pokud v parsovaném objektu provedete jakékoli změny, musíte zavolat
dirty(), aby kontejner věděl, že má aktualizovat cache. Viz takéreplace().
- raw_data(name, decode=True, normalize_to_nfc=True)[zdroj]¶
Vrátí surová data odpovídající souboru zadanému pomocí name
- Parametry:
decode – Pokud je True a soubor má textový typ MIME, dekóduje ho a místo surových bajtů vrátí objekt unicode.
normalize_to_nfc – Pokud je True, vrácený objekt unicode se normalizuje do normalizační formy NFC, jak vyžadují formáty souborů EPUB a AZW3.
- relpath(path, base=None)[zdroj]¶
Převede absolutní cestu (s oddělovači OS) na cestu relativní k base (výchozí je self.root). Relativní cesta není name. K tomu použijte
abspath_to_name().
- remove_from_spine(spine_items, remove_if_no_longer_in_spine=True)[zdroj]¶
Odstraní zadané položky (podle kanonického názvu) ze spine. Pokud je
remove_if_no_longer_in_spineTrue, položky se odstraní také z knihy, nejen ze spine.
- remove_from_xml(item)[zdroj]¶
Odstraní položku z rodičovského prvku a opraví odsazení (funguje pouze se samozavíracími položkami)
- remove_item(name, remove_from_guide=True)[zdroj]¶
Odstraní z tohoto kontejneru položku identifikovanou pomocí name. Tím se odstraní všechny odkazy na položku v manifestu OPF, guide a spine i ze všech interních cache.
- rename(current_name, new_name)[zdroj]¶
Přejmenuje soubor z current_name na new_name. Pokud se změní složka, ve které se soubor nachází, automaticky přepočítá všechny odkazy uvnitř tohoto souboru na nový základ. Pamatujte však, že odkazy v ostatních souborech, které by mohly na tento soubor odkazovat, se neaktualizují. Je to kvůli výkonu; takové aktualizace by se měly provádět najednou hromadně.
- replace(name, obj)[zdroj]¶
Nahradí parsovaný objekt odpovídající name objektem obj, který musí být podobného typu, tj. strom lxml pro HTML/XML nebo šablona stylů css_parser pro soubor CSS.
- replace_links(name, replace_func)[zdroj]¶
Nahradí všechny odkazy v name pomocí replace_func, což musí být volatelný objekt, který přijímá URL a vrací nahrazenou URL. Musí mít také atribut ‚replaced‘, který se nastaví na True, pokud se provede nějaké skutečné nahrazení. Pohodlné způsoby vytváření takových volatelných objektů poskytují třídy
LinkReplaceraLinkRebaser.
- serialize_item(name)[zdroj]¶
Převede parsovaný objekt (identifikovaný kanonickým názvem) na bajtový řetězec. Viz
parsed().
- set_spine(spine_items)[zdroj]¶
Nastaví spine na spine_items, kde spine_items je iterovatelný objekt ve tvaru (name, linear). Vyvolá chybu, pokud některý z názvů není přítomen v manifestu.
- property spine_items¶
Iterátor vracející cestu pro každou položku ve spine knihy. Viz také:
spine_iteraspine_items.
- property spine_iter¶
Iterátor, který pro každou položku ve spine knihy vrací item, name a is_linear. item je prvek lxml, name je kanonický název souboru a is_linear je True, pokud je položka lineární. Viz také:
spine_namesaspine_items.
- property spine_names¶
Iterátor vracející name a is_linear pro každou položku ve spine knihy. Viz také:
spine_iteraspine_items.
Správa souborů komponent v kontejneru¶
- calibre.ebooks.oeb.polish.replace.replace_links(container, link_map, frag_map=<function <lambda>>, replace_in_opf=False)[zdroj]¶
Nahradí odkazy na soubory v kontejneru. Projde všechny soubory v kontejneru a změní v nich zadané odkazy.
- Parametry:
link_map – Mapování starého kanonického názvu na nový kanonický název. Například:
{'images/old.png': 'images/new.png'}frag_map – Volatelný objekt, který přijímá dva argumenty
(name, anchor)a vrací novou kotvu. To je užitečné, pokud potřebujete změnit kotvy v souborech HTML. Ve výchozím nastavení nedělá nic.replace_in_opf – Pokud je False, odkazy v souboru OPF se nenahrazují.
- calibre.ebooks.oeb.polish.replace.rename_files(container, file_map)[zdroj]¶
Přejmenuje soubory v kontejneru a automaticky aktualizuje všechny odkazy na ně.
- Parametry:
file_map – Mapování starého kanonického názvu na nový kanonický název, například:
{'text/chapter1.html': 'chapter1.html'}.
- calibre.ebooks.oeb.polish.replace.get_recommended_folders(container, names)[zdroj]¶
Vrátí složky doporučené pro dané názvy souborů. Doporučení vychází z toho, kde se v kontejneru nachází většina souborů stejného typu. Pokud nejsou přítomny žádné soubory určitého typu, za doporučenou složku se považuje složka obsahující soubor OPF.
Pěkný tisk a automatická analýza opravy chyb¶
- calibre.ebooks.oeb.polish.pretty.fix_html(container, raw)[zdroj]¶
Opraví všechny chyby parsování v HTML reprezentovaném jako řetězec v raw. Oprava se provádí pomocí parsovacího algoritmu HTML5.
- calibre.ebooks.oeb.polish.pretty.fix_all_html(container)[zdroj]¶
Opraví všechny chyby parsování ve všech souborech HTML v kontejneru. Oprava se provádí pomocí parsovacího algoritmu HTML5.
- calibre.ebooks.oeb.polish.pretty.pretty_html(container, name, raw)[zdroj]¶
Naformátuje pro přehlednost HTML reprezentované jako řetězec v raw
- calibre.ebooks.oeb.polish.pretty.pretty_css(container, name, raw)[zdroj]¶
Naformátuje pro přehlednost CSS reprezentované jako řetězec v raw
Správa přebalů knih¶
Rozdělování a slučování souborů¶
- calibre.ebooks.oeb.polish.split.split(container, name, loc_or_xpath, before=True, totals=None)[zdroj]¶
Rozdělí soubor zadaný pomocí name na pozici určené hodnotou loc_or_xpath. Rozdělení automaticky migruje všechny odkazy a reference na dotčené soubory.
- Parametry:
loc_or_xpath – Měl by to být výraz XPath, například //h:div[@id=“split_here“]. Může to být také loc, který se interně používá k implementaci dělení v panelu náhledu.
before – Pokud je True, rozdělení proběhne před identifikovaným prvkem, jinak za ním.
totals – Používá se interně
- calibre.ebooks.oeb.polish.split.multisplit(container, name, xpath, before=True)[zdroj]¶
Rozdělí zadaný soubor na více místech (všechny značky, které odpovídají zadanému výrazu XPath). Viz také:
split(). Rozdělení automaticky migruje všechny odkazy a reference na dotčené soubory.- Parametry:
before – Pokud je True, rozdělení proběhnou před identifikovaným prvkem, jinak za ním.
- calibre.ebooks.oeb.polish.split.merge(container, category, names, master)[zdroj]¶
Sloučí zadané soubory do jednoho souboru a automaticky migruje všechny odkazy a reference na dotčené soubory. Všechny soubory musí být buď soubory HTML, nebo CSS.
- Parametry:
category – Musí být buď
'text'pro soubory HTML, nebo'styles'pro soubory CSSnames – Seznam souborů ke sloučení
master – Který ze slučovaných souborů je master soubor, tedy soubor, který po sloučení zůstane.
Správa obálek¶
- calibre.ebooks.oeb.polish.cover.set_cover(container, cover_path, report=None, options=None)[zdroj]¶
Nastaví obálku knihy na obrázek určený pomocí cover_path.
- Parametry:
cover_path – Buď absolutní cesta k souboru obrázku, nebo kanonický název obrázku v knize. Při použití obrázku v knize musíte také nastavit options, viz níže.
report – Volitelný volatelný objekt, který přijímá jeden argument. Bude volán s informacemi o zpracovávaných úlohách.
options – None nebo slovník určující, jak se obálka nastaví. Slovník může obsahovat položky: keep_aspect: True nebo False (Zachovat poměr stran obálek v EPUB) no_svg: True nebo False (Použít na titulní stránce EPUB obalový prvek SVG pro obálku) existing: True nebo False (
cover_pathodkazuje na existující obrázek v knize)
Práce s CSS¶
- calibre.ebooks.oeb.polish.fonts.change_font(container, old_name, new_name=None)[zdroj]¶
Změní rodinu písma z old_name na new_name. Změní všechny výskyty rodiny písma v šablonách stylů, značkách <style> a atributech style. Pokud old_name odkazuje na vložené písmo, bude odstraněno. Nastavením new_name na None můžete rodinu písma místo změny odebrat.
- calibre.ebooks.oeb.polish.css.remove_unused_css(container, report=None, remove_unused_classes=False, merge_rules=False, merge_rules_with_identical_properties=False, remove_unreferenced_sheets=False)[zdroj]¶
Odstraní z knihy všechna nepoužitá pravidla CSS. Nepoužité pravidlo CSS je takové, které neodpovídá žádnému skutečnému obsahu.
- Parametry:
report – Volitelný volatelný objekt, který přijímá jeden argument. Volá se s informacemi o prováděných operacích.
remove_unused_classes – Pokud je True, odstraní se také atributy class v HTML, které neodpovídají žádným pravidlům CSS.
merge_rules – Pokud je True, sloučí se pravidla se stejnými selektory.
merge_rules_with_identical_properties – Pokud je True, sloučí se pravidla se stejnými vlastnostmi.
remove_unreferenced_sheets – Pokud je True, odstraní se šablony stylů, na které neodkazuje žádný obsah
- calibre.ebooks.oeb.polish.css.filter_css(container, properties, names=())[zdroj]¶
Odstraní zadané vlastnosti CSS ze všech pravidel CSS v knize.
- Parametry:
properties – Množina vlastností k odstranění. Například:
{'font-family', 'color'}.names – Soubory, ze kterých se mají vlastnosti odstranit. Výchozí jsou všechny soubory HTML a CSS v knize.
Práce s obsahem¶
Nástroj na úpravu knih¶
- class calibre.gui2.tweak_book.plugin.Tool[zdroj]¶
Bases:
objectZákladní třída pro jednotlivé nástroje v pluginu Editoru e-knih. Mezi užitečné členy patří:
self.plugin: Odkaz na objektcalibre.customize.Plugin, ke kterému tento nástroj patří.self.
bossself.
gui
Metody, které musí být přepsány v podtřídách:
- name = None¶
Nastavte na jedinečný název; použije se jako klíč
- allowed_in_toolbar = True¶
Pokud je True, uživatel může zvolit umístění tohoto nástroje na panel nástrojů modulů
Pokud je True, uživatel může zvolit umístění tohoto nástroje do nabídky modulů
- toolbar_button_popup_mode = 'delayed'¶
Režim vyskakovací nabídky tlačítka na panelu nástrojů, pokud nějakou má. Možné hodnoty jsou ‚delayed‘, ‚instant‘, ‚button‘
- property boss¶
Objekt
calibre.gui2.tweak_book.boss.Boss. Používá se k ovládání uživatelského rozhraní.
- property gui¶
Hlavní okno uživatelského rozhraní
- property current_container¶
Vrátí aktuální objekt
calibre.ebooks.oeb.polish.container.Container, který představuje upravovanou knihu.
- register_shortcut(qaction, unique_name, default_keys=(), short_text=None, description=None, **extra_data)[zdroj]¶
Zaregistruje klávesovou zkratku, která vyvolá zadaný
qaction. Tuto klávesovou zkratku si uživatel bude moci automaticky přizpůsobit v části Klávesové zkratky předvoleb editoru.- Parametry:
qaction – Objekt QAction, který bude vyvolán, když uživatel stiskne nakonfigurovanou kombinaci kláves.
unique_name – Jedinečný název této zkratky nebo akce. Použije se interně a nesmí být sdílen s žádnými jinými akcemi v tomto pluginu.
default_keys – Seznam výchozích klávesových zkratek. Pokud není zadán, nenastaví se žádné výchozí zkratky. Pokud jsou zde zadané zkratky v konfliktu s vestavěnými zkratkami nebo se zkratkami z uživatelské konfigurace či jiných pluginů, budou ignorovány. V takovém případě budou uživatelé muset zkratky nakonfigurovat ručně v Předvolbách. Například:
default_keys=('Ctrl+J', 'F9').short_text – Volitelný krátký popis této akce. Pokud není zadán, použije se text z QAction.
description – Volitelný delší popis této akce; použije se v položce předvoleb pro tuto zkratku.
- create_action(for_toolbar=True)[zdroj]¶
Vytvoří QAction, který bude přidán buď na panel nástrojů modulů, nebo do nabídky modulů podle
for_toolbar. Například:def create_action(self, for_toolbar=True): ac = QAction(get_icons('myicon.png'), 'Do something') if for_toolbar: # We want the toolbar button to have a popup menu menu = QMenu() ac.setMenu(menu) menu.addAction('Do something else') subaction = menu.addAction('And another') # Register a keyboard shortcut for this toolbar action be # careful to do this for only one of the toolbar action or # the menu action, not both. self.register_shortcut(ac, 'some-unique-name', default_keys=('Ctrl+K',)) return ac
Viz také
Metoda
register_shortcut().
Ovládání uživatelského rozhraní editoru¶
Uživatelské rozhraní editoru e-knih je ovládáno jediným globálním Hlavním objektem. To má mnoho užitečných metod, které lze použít v kódu modulu k provádění běžných úkolů.
- class calibre.gui2.tweak_book.boss.Boss(parent, notify=None)[zdroj]¶
-
- apply_container_update_to_gui(mark_as_modified=True)[zdroj]¶
Aktualizuje všechny komponenty uživatelského rozhraní tak, aby odrážely nejnovější data v aktuálním kontejneru knihy.
- Parametry:
mark_as_modified – Pokud je True, kniha bude označena jako změněná, takže uživatel bude při ukončení vyzván k jejímu uložení.
- commit_all_editors_to_container()[zdroj]¶
Potvrdí do kontejneru všechny změny, které uživatel provedl v souborech otevřených v editorech. Tuto metodu byste měli zavolat před prováděním jakýchkoli akcí s aktuálním kontejnerem
- property currently_editing¶
Vrátí název aktuálně upravovaného souboru nebo None, pokud se žádný soubor neupravuje
- edit_file(name, syntax=None, use_template=None)[zdroj]¶
Otevře soubor zadaný pomocí name v editoru
- Parametry:
syntax – Typ média souboru, například
'text/html'. Pokud není zadán, odhadne se z přípony souboru.use_template – Šablona, kterou se inicializuje otevřený editor
- open_book(path=None, edit_file=None, clear_notify_data=True, open_folder=False, search_text=None)[zdroj]¶
Otevře e-knihu v umístění
pathk úpravám. Zobrazí chybu, pokud e-kniha není v podporovaném formátu nebo aktuální kniha obsahuje neuložené změny.- Parametry:
edit_file – Název souboru v nově otevřené knize, jehož úpravy se mají zahájit. Může to být také seznam názvů.
- rewind_savepoint()[zdroj]¶
Vrátí zpět předchozí vytvoření kontrolního bodu obnovení; užitečné, pokud vytvoříte kontrolní bod a poté operaci zrušíte bez provedení změn
- show_current_diff(allow_revert=True, to_container=None)[zdroj]¶
Zobrazí změny knihy oproti stavu posledního kontrolního bodu
- Parametry:
allow_revert – Pokud je True, dialog rozdílů bude obsahovat tlačítko umožňující uživateli vrátit všechny změny
to_container – Objekt kontejneru, se kterým se má aktuální kontejner porovnat. Pokud je None, použije se kontejner z předchozího kontrolního bodu
