Projekt

Obecné

Profil

Požadavek #147

otevřený

E-knihy Pierot: převod PDF→EPUB a prodej jedné knihy ve víc podobách (noveknihy.com)

Přidáno uživatelem Šimon Formánek před asi 2 hodin(y).

Stav:
Nový
Priorita:
Normální
Přiřazeno:
-
Začátek:
2026-09-22
Uzavřít do:
% Hotovo:

0%

Odhadovaná doba:
Strávený čas:

Popis

Zpětně založený tiket k hotové práci (repo /home/f/git/noveknihy, větev main, commity 1974f932…7d3221f0). Zákazník: Pierot (nakladatelství), pilotní titul Louskáček.

h3. 1. Převodník PDF→EPUB (bin/pdf2epub)

  • Původní písma z PDF v reflowable verzi (--orig-fonts). Přitom opravena chyba, kvůli které se nadpisy faksimile nikdy nevykreslily svým písmem: font vytažený z PDF nemá tabulku post, kterou webový font mít musí, a každý prohlížečový engine ho odmítne.
  • Dvoustrany (--spreads): každá půlka archu se hlásí, na které straně hřbetu byla vytištěna. Rozevření bez textu (předsádka) se neřeže na půlky, jinak se v jednostránkovém režimu ukázalo dvakrát po sobě.
  • Automatický ořez ilustrací (pdf2epub/motif.py): malba se hledá podle odchylky od barvy podkladu strany, výřez je nejmenší okno od čtverce po 4:2, které pobere většinu malby. Dvě skupiny daleko od sebe se vyříznou a postaví těsně vedle sebe.
  • Kompatibilita se starými čtečkami: text rozdělený po kapitolách, každé písmo vložené jako woff2 i nekomprimované sfnt, CFF obrysy překreslené na TrueType, čisté cesty v manifestu.
  • Obrázek nevytlačí text ze stránky: šířka zapsaná u každého obrázku podle jeho tvaru, tištěná strana přestala být flex kontejnerem (ten se ve sloupcích neláme).
  • Vypnuto bílé stínování živého textu faksimile (profil edice, halo 0).

h3. 2. Soubory pro Kindle (bin/epub2kindle, bin/kindlegen.Dockerfile)

  • Kontejner s Amazonovým kindlegen vytaženým z balíku Kindle Previeweru (jeho GUI je React Native v MSIX, Wine ho nespustí; engine pod ním je obyčejný Win32). Slouží zároveň jako kontrola: je to táž validace, kterou dělá KDP při nahrání.
  • Reflowable jde přes Calibre (.azw3, čistý KF8), pevná sazba přes kindlegen (.mobi, nese MOBI6 i KF8). Faksimile prochází Amazonovým převodem bez jediné výstrahy po doplnění kindlovských metadat do OPF.

h3. 3. Obchod: jedna e-kniha, víc souborů

  • Nová tabulka upload_files (migrace 20260922100000). Produkt má nově dva druhy, tištěný a elektronický; PDF přestalo být samostatným formátem a je jedním ze souborů. Varianta přejmenována na "E-kniha" (migrace 20260922110000).
  • Soubor se všude hledá podle produktu (CustomerLibrary::fileFor), jméno u nároku je jen záloha pro staré řádky. Požadavek jmenuje druh (azw3), nikdy jméno souboru.
  • Tři stránky na dvě patra: knihovnička (polička s knihami, po rozkliknutí detail s podobami), detail objednávky a produktová stránka. U každé podoby věta, k čemu je ("Pro starší Kindle k přímému nahrání").
  • Prodejní formulář nahrává všechny podoby najednou, zapadá do nového průvodce v krocích.
  • Send to Kindle i čtečka v prohlížeči si berou EPUB, ne první soubor v pořadí.

h3. 4. Import do katalogu (bin/pierot_import.php)

Z hotových souborů a popisu knihy založí produkt toutéž cestou, kterou jde prodejní formulář; obálku vytáhne z EPUBu. Sazbu každého souboru přečte ze souboru samotného.

h3. 5. Bezpečnost uploadu (prověřeno)

Odmítnuto: PHP skript s příponou .epub, podvržený ZIP, tmp_name mířící na soubor serveru, dvojitá přípona, soubor přes 50 MB, traversal v parametru, cizí nárok, stahování bez přihlášení. Nalezeny a opraveny dvě skutečné chyby:

  • redirect_downloader maže celý pub/ při každém stažení (souběžná stahování si berou symlinky, výsledkem je 404) a vydává soubor pod odkazem bez ověření. Knihovna teď streamuje sama.
  • PHP zahodí POST přes post_max_size celý a formulář se tiše vrátil prázdný; teď to hlásí.

h3. 6. Infrastruktura

Limity uploadu zvednuty na 64M/80M per-pool (ne globálně, na strojích běží cizí weby) na dev, virtual (produkce) a minifaidros (admin). Původní konfigurace zazálohovány, ověřeno php-fpm -t a reload.

h3. Odkazy

  • Commity: 1974f932, 02408598, 924affb6, 3f18aed3, 7d3221f0
  • Dodané soubory zákazníkovi: ~/git/pierot (reflow, faksimile s dvoustranami, kombinovaná verze, v původních i open-source písmech, plus AZW3/MOBI)
  • Nasazení na produkci řeší jiný agent

Také k dispozici: Atom PDF