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 situazione | Pratiche consigliate | motivo |
|---|---|---|
| È 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 pagine | Eliminare la voce e accedere | I numeri di pagina fuori limite causeranno un errore nel salto |
get_toc() restituisce una lista vuota | Utilizza invece l'analisi del layout del testo e non riprovare alla cieca | Il file potrebbe non contenere metadati dei segnalibri incorporati |
| Lo stesso titolo corrisponde a più numeri di pagina diversi | Contrassegna come ambiguo, passa alla verifica manuale | Impossibile 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:
- Salta le voci con numeri di pagina non validi e registra un avviso.
- Conserva segnaposto come
[untitled]per i titoli vuoti per mantenere l'integrità strutturale. - 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:
| Documentazione | Risultati get_toc() | Trattamento consigliato |
|---|---|---|
| Ci sono segnalibri e la struttura è legale | Restituisce un elenco di triple | Utilizzare direttamente dopo la verifica |
| Sono presenti dei segnalibri ma il livello o il numero di pagina sono anomali | Restituisce un elenco contenente elementi di eccezione | Filtrare e registrare i registri, passare al funzionamento manuale se necessario |
| Visivamente c'è una pagina con un sommario ma nessun segnalibro | Restituisce l'elenco vuoto | Utilizzare invece l'analisi del layout del testo |
| EPUB e altri documenti di ridisposizione | Il 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 fenomeni | decisione di elaborazione | Se l'automazione è applicabile |
|---|---|---|
| Il numero di pagina è 0 o maggiore del numero totale di pagine | Eliminare la voce e registrarla | SÌ |
| Il livello è inferiore a 1 o non intero | Procedere secondo le regole di cui sopra (vedi istruzioni precedenti) | SÌ |
| Il titolo è completamente vuoto o puramente simbolico | Sostituisci con [untitled] | SÌ |
| Salto di livello (ad esempio da 1 a 3) | Mantieni il livello originale e non aggiungere livelli intermedi | Sì (la struttura è legale) |
| Lo stesso titolo corrisponde a più numeri di pagina diversi | Contrassegna come ambiguo, trasferisci nel manuale | NO |
| Il numero di voci supera 200 e non vi è alcun cambio di livello | Se si sospetta un errore di riconoscimento dell'OCR, è necessaria la verifica manuale. | NO |
| Contiene un URI esterno o un'azione JavaScript | Filtra gli elementi non di salto di pagina | Sì (politica di sicurezza) |
| Documenti riorganizzati come EPUB, i numeri di pagina sono (capitolo, pno) | Questa logica di verifica del numero di pagina non è applicabile | No (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.


