Cosa devo fare se riesco a fare clic sulla pagina del sommario di un PDF ma perdo il livello dopo l'estrazione?

La gerarchia dei segnalibri deve essere controllata prima della scrittura. Il primo elemento è di un livello e gli elementi successivi possono essere aumentati al massimo di un livello; l'esempio rifiuta livelli illegali e numeri di pagina fuori limite e non modifica automaticamente il livello per falsificare la struttura della directory. I numeri delle pagine dei segnalibri iniziano da uno e gli indici delle pagine in genere iniziano da zero.

La pagina del sommario del PDF può essere reindirizzata normalmente nel lettore, ma dopo essere stata estratta utilizzando uno script, la gerarchia potrebbe essere piatta, i numeri di pagina potrebbero essere fuori posto o persino l'indice potrebbe essere anomalo. Questo tipo di problema è comune quando si uniscono file scansionati o file con strutture di segnalibri irregolari. Se i risultati dell'estrazione vengono consegnati direttamente agli utenti a valle, potrebbero verificarsi errori nella segmentazione e nel collegamento della traduzione.

Questo articolo è destinato agli sviluppatori e ai team di documentazione che necessitano di elaborare in batch i cataloghi PDF. Dopo la lettura, puoi comprendere il significato del valore restituito get_toc(), padroneggiare le regole di verifica per livelli e numeri di pagina e sapere quali situazioni dovrebbero essere convertite alla verifica manuale. Questo articolo utilizza un campione sintetico per dimostrare il metodo di elaborazione e il codice è stato controllato dall'esempio in un ambiente isolato, ma ciò non rappresenta una garanzia di tutti i file reali o degli effetti del prodotto. Prima di elaborare documenti importanti, conservare gli originali e rivederli rispettando i limiti e gli elementi di accettazione nel testo.

Cosa devo fare se è possibile fare clic sulla pagina del sommario del PDF, ma la gerarchia viene persa dopo l'estrazione? Conclusione di una frase

Prima verificare, poi scrivere: è necessario controllare prima il livello del segnalibro, il primo elemento viene considerato come primo livello, i livelli successivi non devono superare l'elemento precedente più uno e le voci con numeri di pagina fuori limite non verranno scritte.

la tua situazionePratiche consigliatemotivo
È possibile fare clic sulla pagina della directory e la gerarchia risulta piatta o disallineata dopo l'estrazione.Utilizzare innanzitutto get_toc() per ottenere l'elenco originale, quindi verificarlo uno per uno prima di utilizzarlo.L'elenco originale restituito da get_toc() non ha una convalida strutturata
Il numero di pagina è 0 o supera il numero totale di pagineEliminare la voce e accedereI numeri di pagina fuori limite causeranno un errore nel salto
get_toc() restituisce una lista vuotaUtilizza invece l'analisi del layout del testo e non riprovare alla ciecaIl file potrebbe non contenere metadati dei segnalibri incorporati
Lo stesso titolo corrisponde a più numeri di pagina diversiContrassegna come ambiguo, passa alla verifica manualeImpossibile determinare automaticamente quale numero di pagina è corretto

Perché il risultato dell'estrazione perde livelli?

Per impostazione predefinita, get_toc() restituisce un elenco di triple [level, title, page]. Tra questi, page è il numero di pagina fisica a partire da 1, e level rappresenta solo la profondità di nidificazione e non garantisce continuità o legalità.

Se il PDF di origine è stato generato da uno strumento di scansione unione, i problemi comuni includono:

  • Salto di livello: ad esempio, salta direttamente da 1 a 3
  • Eccezione numero di pagina: il numero di pagina è 0 o supera il numero totale di pagine
  • Eccezione titolo: il titolo contiene caratteri di controllo

Se utilizzato direttamente per attività downstream, causerà confusione nei segmenti di traduzione o errori di collegamento. Ancora più insidioso, alcuni PDF hanno una pagina con un sommario visivo ma non metadati di segnalibri incorporati. È normale che get_toc() restituisca un elenco vuoto in questo momento ed è necessario utilizzare invece l'analisi del layout del testo.

Esempio di composizione autonoma

Consulta l'elenco di importazione per esempi di dipendenze. Il codice costruisce l'input in memoria e i record di esecuzione vengono forniti separatamente e non rappresentano una garanzia di tutti i file reali.

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")

Regole di elaborazione per input legali e illegali

L'input corretto dovrebbe soddisfare: un elenco di triple con livelli continui e numeri di pagina nell'intervallo [1, doc.page_count]. Ad esempio, [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] è legale, il secondo livello appare dopo il primo livello ed è conforme alla sintassi della struttura PDF.

Gli input errati comuni includono:

  • Il livello è 0 o negativo
  • Il numero di pagina è 0
  • Il numero di pagine supera il numero totale di pagine
  • Il titolo è una stringa vuota o contiene solo spazi bianchi

Per queste situazioni, i metodi indicati nell'articolo sono i seguenti:

  1. Salta le voci con numeri di pagina non validi e registra un avviso.
  2. Conserva segnaposto come [untitled] per i titoli vuoti per mantenere l'integrità strutturale.
  3. Non interrompere l'analisi dell'intera directory a causa di un singolo errore.

Per quanto riguarda il caso in cui il livello è inferiore a 1, ci sono due strategie di cui essere consapevoli: la parte riassuntiva dell'esempio consiglia di rifiutare i livelli illegali e di non correggerli automaticamente, mentre la descrizione della regola nell'articolo è di forzarlo a 1. Decidi tra i due in base al tuo processo. Si noti inoltre che queste regole sono progettate per garantire la robustezza dei processi a valle e non sono requisiti obbligatori dello standard PDF. I test effettivi hanno rilevato che quando il numero di pagina supera il limite, PyMuPDF stamperà un avviso ma non genererà un'eccezione. Pertanto la funzione di verifica deve filtrare attivamente e non può fare affidamento sul comportamento della libreria.

📊 Confronto fondamentale

In diverse situazioni documentali, i risultati e i metodi di elaborazione suggeriti di get_toc() sono diversi:

DocumentazioneRisultati get_toc()Trattamento consigliato
Ci sono segnalibri e la struttura è legaleRestituisce un elenco di tripleUtilizzare direttamente dopo la verifica
Sono presenti dei segnalibri ma il livello o il numero di pagina sono anomaliRestituisce un elenco contenente elementi di eccezioneFiltrare e registrare i registri, passare al funzionamento manuale se necessario
Visivamente c'è una pagina con un sommario ma nessun segnalibroRestituisce l'elenco vuotoUtilizzare invece l'analisi del layout del testo
EPUB e altri documenti di ridisposizioneIl formato del numero di pagina è (capitolo, pno)Questa logica di verifica del numero di pagina non è applicabile e richiede un'elaborazione speciale.

Criteri di accettazione e limiti della revisione manuale

La tabella seguente si concentra solo sull'estrazione dei metadati del catalogo PDF:

Osservare i fenomenidecisione di elaborazioneSe l'automazione è applicabile
Il numero di pagina è 0 o maggiore del numero totale di pagineEliminare la voce e registrarlaSÌ
Il livello è inferiore a 1 o non interoProcedere secondo le regole di cui sopra (vedi istruzioni precedenti)SÌ
Il titolo è completamente vuoto o puramente simbolicoSostituisci con [untitled]SÌ
Salto di livello (ad esempio da 1 a 3)Mantieni il livello originale e non aggiungere livelli intermediSì (la struttura è legale)
Lo stesso titolo corrisponde a più numeri di pagina diversiContrassegna come ambiguo, trasferisci nel manualeNO
Il numero di voci supera 200 e non vi è alcun cambio di livelloSe si sospetta un errore di riconoscimento dell'OCR, è necessaria la verifica manuale.NO
Contiene un URI esterno o un'azione JavaScriptFiltra gli elementi non di salto di paginaSì (politica di sicurezza)
Documenti riorganizzati come EPUB, i numeri di pagina sono (capitolo, pno)Questa logica di verifica del numero di pagina non è applicabileNo (richiede un'elaborazione speciale)

Va notato che la dimostrazione del codice verifica solo la legalità della struttura e l'effetto end-to-end deve essere combinato con il rendering per verificare se il salto è accurato.

🎯Quale metodo è adatto a te?

Se è necessario estrarre le directory in batch

Eseguire prima la verifica strutturale sul risultato get_toc(), quindi scriverlo nel processo successivo e conservare il registro per la revisione.

Se il tuo PDF ha visivamente un sommario ma l'estrazione è vuota

Non riprovare get_toc() ripetutamente, utilizzare invece l'elaborazione dell'analisi del layout del testo.

Se la voce della tua directory appare su pagine diverse con lo stesso nome

Converti queste voci in verifica manuale e non seleziona automaticamente uno dei numeri di pagina.

Se stai inviando il tuo documento a un processo di traduzione

Innanzitutto verificare che la struttura della directory e i numeri di pagina siano corretti prima di tradurre per evitare confusione nella segmentazione.

❓ Domande frequenti (FAQ)

1. Perché il numero di pagina inizia da 1, mentre l'indice della pagina solitamente inizia da 0?

I numeri di pagina dei segnalibri sono numeri di pagina fisica che iniziano da 1, mentre gli indici di pagina nelle librerie come PyMuPDF di solito iniziano da 0. È necessario prestare attenzione a questa differenza durante la conversione, altrimenti i numeri di pagina saranno disallineati.

2. Se get_toc() restituisce una lista vuota, significa che c'è qualcosa che non va nel file?

incerto. Alcuni PDF presentano visivamente una pagina con un sommario, ma non incorporano i metadati dei segnalibri. È normale restituire un elenco vuoto. In questo caso è invece opportuno utilizzare l'analisi del layout del testo.

3. Quando il numero di pagina supera il limite, la biblioteca segnalerà direttamente un errore?

Non. La misurazione effettiva in questo articolo ha rilevato che PyMuPDF stamperà un avviso ma non genererà un'eccezione quando il numero di pagina supera il limite, quindi la funzione di verifica deve filtrare attivamente.

4. È necessario riempire gli strati intermedi per i salti di livello (come passare direttamente da 1 a 3)?

Il suggerimento nell'articolo è di mantenere la gerarchia originaria e di non aggiungere strati intermedi, perché questa struttura è ancora legale.

📝 Riepilogo

La gerarchia e i numeri di pagina della directory PDF devono essere verificati prima dell'uso. L'output originale di get_toc() non può essere considerato direttamente come una struttura affidabile. Quando si riscontra ambiguità o assenza di segnalibri, il passaggio al lavoro manuale o l'utilizzo tempestivo di altri metodi può evitare errori nei processi a valle.

Provalo subito: carica il documento per iniziare la traduzione, mantenendo il layout originale

Riferimenti e passi successivi

Passaggio successivo suggerito: preparare un PDF di prova contenente problemi di directory noti, eseguire lo script di verifica sopra riportato e contare la proporzione delle varie anomalie. Se si verificano frequentemente salti di livello o spostamenti di numero di pagina, prendere in considerazione l'aggiunta di un passaggio di ricostruzione della directory prima della traduzione.

Utilizza questa lista di controllo per la traduzione dei documenti

Innanzitutto controlla l'ordine delle pagine, la posizione della fonte e l'integrità del testo, quindi invia lo stesso campione desensibilizzato al processo di traduzione. Dopo la traduzione, devi ancora verificare se titolo, testo e illustrazioni corrispondono correttamente. Non puoi semplicemente verificare se il testo è fluido.

OmniDoc fornisce un portale di traduzione di documenti multiformato e il sito Web ufficiale introduce funzioni OCR, glossario e confronto bilingue. Per i team che desiderano iniziare a lavorare direttamente dai file, questo è un percorso che vale la pena valutare con campioni reali. Utilizza file non sensibilizzati che sei autorizzato a caricare e utilizza gli elementi di controllo in questo articolo per esaminare i risultati. Non si afferma qui che OmniDoc utilizzi le librerie open source o gli algoritmi interni in questo articolo, né l'esempio sostituisce il test delle prestazioni del prodotto.

Aggiornato il 2026-11-15