Co powinienem zrobić, jeśli mogę kliknąć stronę spisu treści pliku PDF, ale po wyodrębnieniu tracę poziom?

Przed zapisaniem należy sprawdzić hierarchię zakładek. Pierwszy przedmiot to jeden poziom, kolejne można podnieść maksymalnie o jeden poziom; przykład odrzuca nielegalne poziomy i numery stron spoza zakresu i nie zmienia automatycznie poziomu w celu sfałszowania struktury katalogów. Numery stron zakładek zaczynają się od jednego, a indeksy stron zwykle zaczynają się od zera.

Stronę spisu treści pliku PDF można normalnie przekierować w czytniku, ale po wyodrębnieniu za pomocą skryptu hierarchia może być płaska, numery stron mogą być źle umieszczone, a nawet indeks może być nieprawidłowy. Tego typu problemy są częste podczas łączenia zeskanowanych plików lub plików o nieregularnej strukturze zakładek. Jeśli wyniki ekstrakcji zostaną bezpośrednio przekazane dalszym użytkownikom, mogą wystąpić błędy w segmentacji tłumaczeń i łączeniu.

Ten artykuł jest przeznaczony dla programistów i zespołów zajmujących się dokumentacją, którzy muszą przetwarzać wsadowo katalogi PDF. Po przeczytaniu można zrozumieć znaczenie zwracanej wartości get_toc(), opanować zasady weryfikacji poziomów i numerów stron oraz wiedzieć, które sytuacje należy zamienić na weryfikację ręczną. W tym artykule wykorzystano próbkę syntetyczną, aby zademonstrować metodę przetwarzania, a kod został sprawdzony przez próbkę w izolowanym środowisku, ale nie gwarantuje to wszystkich rzeczywistych plików lub efektów produktu. Przed przystąpieniem do przetwarzania ważnych dokumentów prosimy o zachowanie oryginałów i zapoznanie się z nimi zgodnie z granicami i pozycjami akceptacji w tekście.

Co powinienem zrobić, jeśli można kliknąć stronę spisu treści w formacie PDF, ale po wyodrębnieniu hierarchia zostaje utracona? Wniosek w jednym zdaniu

Najpierw sprawdź, a potem pisz: Najpierw należy sprawdzić poziom zakładki, za pierwszy poziom uważa się pierwszą pozycję, kolejne poziomy nie powinny przekraczać pozycji poprzedniej plus jeden, a wpisy z numerami stron spoza zakresu nie będą zapisywane.

twoja sytuacjaZalecane praktykipowód
Można kliknąć stronę katalogu, a po wyodrębnieniu hierarchia jest płaska lub źle wyrównana.Najpierw użyj get_toc(), aby uzyskać oryginalną listę, a następnie sprawdź ją jeden po drugim przed jej użyciem.Oryginalna lista zwrócona przez get_toc() nie ma uporządkowanej weryfikacji
Numer strony wynosi 0 lub przekracza całkowitą liczbę stronOdrzuć wpis i zaloguj sięNumery stron spoza zakresu spowodują niepowodzenie skoku
get_toc() zwraca pustą listęZamiast tego użyj analizy układu tekstu i nie próbuj na ślepoPlik może nie mieć osadzonych metadanych zakładek
Ten sam tytuł odpowiada wielu różnym numerom stronOznacz jako niejednoznaczne, przejdź do weryfikacji ręcznejNie można automatycznie określić, który numer strony jest prawidłowy

Dlaczego wynik ekstrakcji traci poziomy?

get_toc() domyślnie wysyła listę trójek [level, title, page]. Wśród nich page to fizyczny numer strony zaczynający się od 1, a level reprezentuje jedynie głębokość zagnieżdżenia i nie gwarantuje ciągłości ani legalności.

Jeśli źródłowy plik PDF został wygenerowany za pomocą narzędzia do scalania skanowania, typowe problemy obejmują:

  • Skok poziomu: Na przykład przeskocz bezpośrednio z 1 na 3
  • Wyjątek dotyczący numeru strony: Numer strony wynosi 0 lub przekracza całkowitą liczbę stron
  • Wyjątek tytułu: Tytuł zawiera znaki sterujące

Jeśli zostanie użyte bezpośrednio do dalszych zadań, spowoduje zamieszanie w segmentach tłumaczenia lub awarię łącza. Co bardziej podstępne, niektóre pliki PDF zawierają wizualny spis treści, ale nie zawierają osadzonych metadanych zakładek. To normalne, że get_toc() zwraca w tym momencie pustą listę i zamiast tego należy zastosować analizę układu tekstu.

Przykład samodzielnej kompozycji

Zobacz listę importów, na przykład zależności. Kod tworzy dane wejściowe w pamięci, a rekordy uruchamiania są dostarczane osobno i nie stanowią gwarancji istnienia wszystkich rzeczywistych plików.

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

Reguły przetwarzania danych wejściowych zgodnych z prawem i nielegalnych

Prawidłowe wprowadzenie powinno spełniać: listę trójek z ciągłymi poziomami i numerami stron z zakresu [1, doc.page_count]. Na przykład [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] jest legalny, drugi poziom pojawia się po pierwszym poziomie i jest zgodny ze składnią konspektu PDF.

Typowe nieprawidłowe dane wejściowe obejmują:

  • Poziom wynosi 0 lub jest ujemny
  • Numer strony to 0
  • Liczba stron przekracza całkowitą liczbę stron
  • Tytuł jest pustym ciągiem znaków lub zawiera tylko białe znaki

W takich sytuacjach metody podane w artykule są następujące:

  1. Pomiń wpisy z nieprawidłowymi numerami stron i zarejestruj ostrzeżenie.
  2. Zachowaj symbole zastępcze, takie jak [untitled] dla pustych tytułów, aby zachować integralność strukturalną.
  3. Nie przerywaj analizowania całego katalogu z powodu pojedynczego błędu.

Jeśli chodzi o przypadek, gdy poziom jest mniejszy niż 1, należy pamiętać o dwóch strategiach: podsumowująca część przykładu opowiada się za odrzuceniem nielegalnych poziomów i nie korygowaniem ich automatycznie, podczas gdy opis zasady w artykule ma na celu wymuszenie wartości 1. Wybierz jedną z nich zgodnie ze swoim procesem. Należy również pamiętać, że zasady te mają na celu zapewnienie niezawodności dalszych procesów i nie są obowiązkowymi wymaganiami standardu PDF. Rzeczywiste testy wykazały, że gdy numer strony przekroczy granicę, PyMuPDF wydrukuje ostrzeżenie, ale nie zgłosi wyjątku. Dlatego funkcja weryfikacji musi aktywnie filtrować i nie może polegać na zachowaniu biblioteki.

📊 Porównanie rdzeni

W różnych sytuacjach związanych z dokumentami wyniki i sugerowane metody przetwarzania get_toc() są różne:

DokumentacjaWyniki get_toc()Zalecane leczenie
Są zakładki i struktura jest legalnaZwraca listę trójekUżyj bezpośrednio po weryfikacji
Istnieją zakładki, ale poziom lub numer strony są nieprawidłoweZwraca listę zawierającą elementy wyjątkówFiltruj i zapisuj logi, w razie potrzeby przełącz na tryb ręczny
Wizualnie znajduje się spis treści, ale nie ma zakładekZwróć pustą listęZamiast tego użyj analizy układu tekstu
EPUB i inne dokumenty przepływuFormat numeru strony to (rozdział, pno)Ta logika weryfikacji numeru strony nie ma zastosowania i wymaga specjalnego przetwarzania.

Kryteria akceptacji i granice ręcznego przeglądu

Poniższa tabela skupia się wyłącznie na wyodrębnianiu metadanych katalogu PDF:

Obserwuj zjawiskadecyzja o przetwarzaniuCzy automatyzacja ma zastosowanie
Numer strony wynosi 0 lub jest większy niż całkowita liczba stronOdrzuć wpis i zarejestruj goTak
Poziom jest mniejszy niż 1 lub nie jest liczbą całkowitąPostępuj zgodnie z powyższymi zasadami (patrz poprzednie instrukcje)Tak
Tytuł zawiera całkowicie puste lub czyste symboleZamień na [untitled]Tak
Skok poziomu (np. z 1 na 3)Zachowaj oryginalną warstwę i nie dodawaj warstw pośrednichTak (struktura jest legalna)
Ten sam tytuł odpowiada wielu różnym numerom stronOznacz jako niejednoznaczne, przenieś do podręcznikaNIE
Liczba wejść przekracza 200 i nie następuje zmiana poziomuW przypadku podejrzenia błędnego rozpoznania OCR wymagana jest ręczna weryfikacja.NIE
Zawiera zewnętrzny identyfikator URI lub akcję JavaScriptFiltruj elementy przeskoku inne niż stronaTak (polityka bezpieczeństwa)
Dokumenty zmienione, takie jak EPUB, numery stron to (rozdział, pno)Ta logika weryfikacji numeru strony nie ma zastosowaniaNie (wymaga specjalnego przetwarzania)

Należy zauważyć, że demonstracja kodu weryfikuje jedynie legalność konstrukcji, a efekt od końca do końca należy połączyć z renderowaniem, aby sprawdzić, czy skok jest dokładny.

🎯 Która metoda jest dla Ciebie odpowiednia?

Jeśli chcesz wyodrębniać katalogi partiami

Najpierw przeprowadź weryfikację strukturalną wyniku get_toc(), następnie zapisz ją w kolejnym procesie i zachowaj dziennik do przeglądu.

Jeśli plik PDF zawiera wizualnie spis treści, ale wyodrębnienie jest puste

Nie ponawiaj wielokrotnie operacji get_toc(), zamiast tego użyj przetwarzania analizy układu tekstu.

Jeśli Twój wpis w katalogu pojawia się na różnych stronach o tej samej nazwie

Przekonwertuj te wpisy na weryfikację ręczną i nie wybieraj automatycznie jednego z numerów stron.

Jeśli przesyłasz dokument do procesu tłumaczenia

Przed tłumaczeniem upewnij się, że struktura katalogów i numery stron są prawidłowe, aby uniknąć nieporozumień związanych z segmentacją.

❓ Często zadawane pytania (FAQ)

1. Dlaczego numer strony zaczyna się od 1, podczas gdy indeks strony zwykle zaczyna się od 0?

Numery stron zakładek to fizyczne numery stron rozpoczynające się od 1, podczas gdy indeksy stron w bibliotekach takich jak PyMuPDF zwykle zaczynają się od 0. Należy zwrócić uwagę na tę różnicę podczas konwersji, w przeciwnym razie numery stron będą źle wyrównane.

2. Jeśli get_toc() zwróci pustą listę, czy oznacza to, że coś jest nie tak z plikiem?

niepewny. Niektóre pliki PDF mają wizualnie stronę ze spisem treści, ale nie osadzają metadanych zakładek. Zwracanie pustej listy jest normalnym zjawiskiem. Zamiast tego należy zastosować analizę układu tekstu.

3. Czy gdy numer strony przekroczy granicę, biblioteka bezpośrednio zgłosi błąd?

Przyzwyczajenie. Rzeczywisty pomiar w tym artykule wykazał, że PyMuPDF wydrukuje ostrzeżenie, ale nie zgłosi wyjątku, gdy numer strony przekroczy granicę, więc funkcja weryfikacji musi aktywnie filtrować.

4. Czy musisz wypełnić środkowe warstwy w przypadku skoków poziomu (np. przejścia bezpośrednio z 1 do 3)?

Sugestia w artykule jest taka, aby zachować pierwotną hierarchię i nie dodawać warstw pośrednich, ponieważ ta struktura jest nadal legalna.

📝 Podsumowanie

Przed użyciem należy sprawdzić hierarchię i numery stron katalogu PDF. Oryginalnego wyniku get_toc() nie można bezpośrednio uważać za niezawodną strukturę. W przypadku napotkania niejasności lub braku zakładek przejście na pracę ręczną lub skorzystanie z innych metod w odpowiednim czasie może uniknąć błędów w dalszych procesach.

Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ

Referencje i kolejne kroki

Sugerowany następny krok: przygotuj testowy plik PDF zawierający znane problemy z katalogami, uruchom powyższy skrypt weryfikacyjny i policz proporcje różnych anomalii. Jeśli często występują skoki poziomów lub zmiany numerów stron, rozważ dodanie etapu rekonstrukcji katalogu przed tłumaczeniem.

Użyj tej listy kontrolnej do tłumaczenia dokumentów

Najpierw sprawdź kolejność stron, lokalizację źródła i integralność tekstu, a następnie prześlij tę samą pozbawioną czułości próbkę do procesu tłumaczenia. Po tłumaczeniu nadal musisz sprawdzić, czy tytuł, tekst i ilustracje poprawnie odpowiadają sobie. Nie można po prostu sprawdzić, czy tekst jest gładki.

OmniDoc udostępnia wieloformatowy portal do tłumaczenia dokumentów, a oficjalna strona internetowa zawiera funkcje OCR, glosariusza i porównywania dokumentów dwujęzycznych. Dla zespołów, które chcą rozpocząć pracę bezpośrednio z plików, jest to ścieżka warta sprawdzenia na podstawie rzeczywistych próbek. Użyj plików pozbawionych zabezpieczeń, do przesłania których masz pozwolenie, i skorzystaj z elementów zaznaczonych w tym artykule, aby sprawdzić wyniki. Nie ma tu żadnego twierdzenia, że OmniDoc korzysta z bibliotek open source lub wewnętrznych algorytmów opisanych w tym artykule, ani też przykład nie zastępuje testowania wydajności produktu.

Zaktualizowano 2026-11-15