Co mám dělat, když mohu kliknout na stránku s obsahem PDF, ale po extrahování ztratím úroveň?
Před zápisem je nutné zkontrolovat hierarchii záložek. První položka je jedna úroveň a další položky lze zvýšit maximálně o jednu úroveň; příklad odmítá nepovolené úrovně a čísla stránek mimo rámec a automaticky nemění úroveň, aby se vytvořila struktura adresářů. Čísla stránek záložek začínají jedničkou a indexy stránek obvykle začínají nulou.
Stránka s obsahem PDF může být přesměrována normálně ve čtečce, ale po extrakci pomocí skriptu může být hierarchie plochá, čísla stránek mohou být nesprávně umístěna nebo dokonce index může být abnormální. Tento typ problému je běžný při slučování naskenovaných souborů nebo souborů s nepravidelnou strukturou záložek. Pokud jsou výsledky extrakce přímo předány následným uživatelům, může dojít k chybám v segmentaci překladu a propojování.
Tento článek je určen pro vývojáře a dokumentační týmy, kteří potřebují dávkové zpracování katalogů PDF. Po přečtení pochopíte význam návratové hodnoty get_toc(), zvládnete ověřovací pravidla pro úrovně a čísla stránek a budete vědět, které situace by měly být převedeny na ruční ověření. Tento článek používá syntetický vzorek k demonstraci metody zpracování a kód byl zkontrolován ukázkou v izolovaném prostředí, ale to nepředstavuje záruku všech skutečných souborů nebo efektů produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
Co mám dělat, když lze kliknout na stránku s obsahem PDF, ale po extrakci se ztratí hierarchie? Závěr jednou větou
Nejprve ověřte, pak zapište: Nejprve je třeba zkontrolovat úroveň záložky, první položka je považována za první úroveň, další úrovně by neměly překročit předchozí položku plus jedna a položky s čísly stránek mimo hranice nebudou zapsány.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
| Na stránku adresáře lze kliknout a hierarchie je po extrakci plochá nebo špatně zarovnaná. | Nejprve použijte get_toc() k získání původního seznamu a poté jej před použitím jeden po druhém ověřte. | Původní seznam vrácený get_toc() nemá žádné strukturované ověření |
| Číslo stránky je 0 nebo překračuje celkový počet stránek | Zahoďte záznam a protokol | Překročení čísel stránek způsobí selhání skoku |
get_toc() vrátí prázdný seznam | Použijte místo toho analýzu rozložení textu a nezkoušejte to slepě | Soubor nemusí mít vložená metadata záložek |
| Stejný název odpovídá více různým číslům stránek | Označit jako nejednoznačné, přejít na ruční ověření | Nelze automaticky určit, které číslo stránky je správné |
Proč výsledek extrakce ztrácí úrovně?
Výchozí nastavení get_toc() na výstup seznamu trojic [level, title, page]. Mezi nimi je page fyzické číslo stránky začínající od 1 a level představuje pouze hloubku vnoření a nezaručuje kontinuitu nebo zákonnost.
Pokud byl zdrojový soubor PDF vygenerován nástrojem pro sloučení skenování, mezi běžné problémy patří:
- Přeskok na úroveň: Například skok přímo z 1 na 3
- Výjimka čísla stránky: Číslo stránky je 0 nebo překračuje celkový počet stránek
- Výjimka názvu: Název obsahuje řídicí znaky
Pokud se použije přímo pro následné úlohy, způsobí to zmatek v překladových segmentech nebo selhání propojení. Ještě záludnější je, že některé soubory PDF mají vizuální stránku s obsahem, ale nemají vložená metadata záložek. Je normální, že get_toc() v tuto chvíli vrátí prázdný seznam a místo toho je třeba použít analýzu rozložení textu.
Příklad samostatné kompozice
Podívejte se na seznam importů například závislosti. Kód vytváří vstup v paměti a záznamy běhu jsou poskytovány samostatně a nepředstavují záruku všech skutečných souborů.
import pymupdf
def validate(rows, pages):
previous = 0
for level, title, page in rows:
if type(level) is not int or level < 1 or level > previous + 1:
raise ValueError("invalid hierarchy")
if type(page) is not int or not 1 <= page <= pages:
raise ValueError("invalid destination")
if not isinstance(title, str) or not title.strip():
raise ValueError("empty title")
previous = level
return rows
with pymupdf.open() as doc:
for _ in range(3):
doc.new_page()
rows = [[1, "Chapter", 1], [2, "Section", 2], [1, "Appendix", 3]]
doc.set_toc(validate(rows, doc.page_count))
assert doc.get_toc() == rows
assert len(doc.get_toc()) == 3
for bad in [[[2, "Bad", 1]], [[1, "Bad", 99]], [[1, "", 1]]]:
try:
validate(bad, doc.page_count)
except ValueError:
pass
else:
raise AssertionError("invalid outline accepted")
Pravidla zpracování pro legální a nelegální vstupy
Správné zadání by mělo splňovat: seznam trojic se spojitými úrovněmi a čísly stránek v rozsahu [1, doc.page_count]. Například [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] je legální, druhá úroveň se objeví po první úrovni a odpovídá syntaxi osnovy PDF.
Mezi běžné nesprávné vstupy patří:
- Úroveň je 0 nebo záporná
- Číslo stránky je 0
- Počet stránek překračuje celkový počet stránek
- Název je prázdný řetězec nebo obsahuje pouze mezery
Pro tyto situace jsou metody uvedené v článku následující:
- Přeskočte položky s neplatnými čísly stránek a zaznamenejte varování.
- Udržujte zástupné symboly, jako je
[untitled]pro prázdné názvy, abyste zachovali strukturální integritu. - Nepřerušujte analýzu celého adresáře kvůli jediné chybě.
Pokud jde o případ, kdy je úroveň nižší než 1, je třeba si uvědomit dvě strategie: souhrnná část příkladu obhajuje odmítnutí nelegálních úrovní a nikoli jejich automatickou opravu, zatímco popis pravidla v článku je vynutit si hodnotu 1. Mezi těmito dvěma se prosím rozhodněte podle svého postupu. Všimněte si také, že tato pravidla jsou navržena tak, aby zajistila robustnost navazujících procesů a nejsou povinnými požadavky standardu PDF. Skutečné testování zjistilo, že když číslo stránky překročí hranici, PyMuPDF vytiskne varování, ale nevyvolá výjimku. Proto musí ověřovací funkce aktivně filtrovat a nemůže se spoléhat na chování knihovny.
📊 Srovnání jádra
V různých situacích dokumentu se výsledky a navrhované metody zpracování get_toc() liší:
| Stav dokumentu | Výsledek get_toc() | Doporučené ovládání |
|---|---|---|
| Záložky a strukturálně legální | Vraťte seznam tripletů | Použití přímo po ověření |
| Záložky existují, ale hierarchie nebo číslo stránky je abnormální | Vrací seznam výjimek | Filtrujte a zaznamenávejte záznamy a převádějte na manuální práci, když je to nutné |
| Vizuální verze má obsah, ale žádnou záložku | Návrat na prázdný seznam | Přechod na analýzu textového rozložení |
| Přeuspořádejte dokumenty, například EPUB | Formát čísla stránky je (kapitola, pno) | Tato logika ověřování čísla stránky není použitelná a vyžaduje speciální zpracování |
Kritéria přijetí a hranice manuálního hodnocení
Tabulka níže se zaměřuje pouze na fázi extrakce metadat PDF katalogu:
| Pozorujte tento jev | Rozhodnutí řešit tuto záležitost | Zda je automatizace vhodná |
|---|---|---|
| Číslo stránky je 0 nebo větší než celkový počet stran | Záznam zahodit a zaznamenat | Ano |
| Úrovně menší než 1 nebo necelé čísla | Ovládejte podle výše uvedených pravidel (viz předchozí vysvětlení) | Ano |
| Názvy jsou buď zcela prázdné, nebo čistě symbolické | Nahraďte [untitled] | Ano |
| Skákaní úrovní (např. 1 až 3) | Zachovat původní vrstvy bez vyplňování středních vrstev | Ano (strukturálně legální) |
| Stejný název odpovídá několika různým číslům stran | Označeno jako nejednoznačné, převedeno na manuální | Ne |
| Více než 200 záznamů bez hierarchických změn | Podezření na mylnou identifikaci OCR vyžaduje ruční ověření | Ne |
| Zahrnuje externí URI nebo JavaScript akce | Filtrujte přesměrování mimo stránku | Ano (bezpečnostní politika) |
| Přeuspořádat dokumenty jako EPUB, číslo stránky (kapitola, pno) | Tato logika ověřování čísla stránky není použitelná | Ne (vyžaduje zvláštní zacházení) |
Všimněte si, že demonstrace kódu pouze ověřuje strukturální legalitu; end-to-end efekty je také nutné kombinovat s renderováním pro ověření přesnosti skoků.
🎯 Která metoda ti vyhovuje?
Pokud potřebujete dávkově extrahovat adresáře
Nejprve provedete strukturální validaci výsledků get_toc(), poté je zapíšete do dalších pracovních postupů a uchováte logy pro ověření.
Pokud má vaše PDF vizuálně obsah, ale je vytaženo prázdné
Nezkoušejte opakovaně get_toc(); přepněte na analýzu a zpracování textového rozložení.
Pokud má váš záznam v adresáři stejný název, ale různé stránky
Tyto položky ověřte ručně; nevybírejte automaticky jedno z čísel stránek.
Pokud chcete předat dokumenty překladatelskému procesu,
Nejprve si ověřte správnou strukturu obsahu a čísla stran před překladem, abyste předešli záměně v odstavcích.
❓ Často kladené otázky (FAQ)
1. Proč číslo stránky začíná na 1, zatímco indexy stránek obvykle začínají na 0?
Čísla stránek záložek jsou fyzická čísla stránek začínající od 1, zatímco indexy stránek v knihovnách jako PyMuPDF obvykle začínají od nuly. Tento rozdíl je důležitý při konverzi, jinak může dojít k nesouladu počtu stran.
2. get_toc(): Znamená vrácení prázdného seznamu nutně problém se souborem?
Nemusí to tak být. Některé PDF mají vizuálně stránku s obsahem, ale žádná vložená metadata záložek, takže vrácení prázdného seznamu je normální. V takovém případě by se měla použít analýza textového rozložení.
3. Pokud číslo stránky překročí hranice, okamžitě nahlásí knihovna chybu?
Ne. Testy v tomto článku ukazují, že PyMuPDF tiskne varování, když čísla stran překročí hranice, ale nevyhazuje výjimky, takže validační funkce musí aktivně filtrovat.
4. Vyžadují hierarchické skoky (například přímý přechod z jedničky na trojku) vyplnění prostředních vrstev?
Návrh v článku je zachovat původní hierarchii a nedoplňovat střední vrstvy, protože tato struktura je stále platná.
📝 Shrnutí
Hierarchie a čísla stran PDF adresářů je třeba před použitím zkontrolovat, takže původní výstup get_toc() nelze přímo považovat za spolehlivou strukturu. Při nejasnostech nebo nedostatku záložek rychle přejděte na manuální práci nebo jiné metody, abyste předešli chybám v procesu v dalším procesu.
Zkušenost nyní: Nahrajte svůj dokument a začněte s překladem, přičemž zachováte původní formátování
Odkazy a další kroky
Dalším krokem je připravit testovací PDF obsahující známé problémy s adresáři, spustit výše uvedený ověřovací skript a vypočítat podíl různých anomálií. Pokud dochází k častým hierarchickým přeskakováním nebo posunem počtu stránek, zvažte přidání kroku rekonstrukce obsahu před překladem.
Použijte tento kontrolní seznam pro překlad dokumentů
Nejprve pečlivě zkontrolujte pořadí stránek, umístění zdroje a integritu textu, poté odevzdejte stejný vzorek desenzitizace do překladatelského procesu. Po překladu je stále nutné zkontrolovat, zda název, hlavní text a popisky správně odpovídají; nestačí posuzovat pouze podle hladkosti textu.
OmniDoc poskytuje portály pro překlad dokumentů ve více formátech a oficiální webové stránky představují OCR, slovníčky a bilingvní referenční funkce. Pro týmy, které chtějí začít přímo ze souborů, je to cesta, kterou stojí za to vyhodnotit na skutečných vzorkech. Použijte anonymizovaný soubor, který jste povolili k nahrání a ověření výsledků pomocí kontrolního seznamu v tomto článku. To netvrdí, že OmniDoc používá open-source knihovnu nebo interní algoritmy z tohoto článku, ani nenahrazuje testování výkonu produktu příklady.


