Apa yang harus saya lakukan jika saya dapat mengklik halaman daftar isi PDF tetapi kehilangan level setelah ekstraksi?

Hirarki bookmark harus diperiksa sebelum menulis. Item pertama adalah satu level, dan item berikutnya dapat ditingkatkan paling banyak satu level; contoh ini menolak level ilegal dan nomor halaman di luar batas, dan tidak secara otomatis mengubah level untuk memalsukan struktur direktori. Nomor halaman penanda dimulai dari satu, dan indeks halaman biasanya dimulai dari nol.

Halaman daftar isi PDF dapat dialihkan secara normal di pembaca, tetapi setelah diekstraksi menggunakan skrip, hierarki mungkin datar, nomor halaman mungkin salah tempat, atau bahkan indeks mungkin tidak normal. Jenis masalah ini umum terjadi saat menggabungkan file yang dipindai atau file dengan struktur penanda yang tidak beraturan. Jika hasil ekstraksi langsung diserahkan ke pengguna hilir, kesalahan dalam segmentasi dan penautan terjemahan dapat terjadi.

Artikel ini ditujukan bagi pengembang dan tim dokumentasi yang perlu memproses katalog PDF secara batch. Setelah membaca, Anda dapat memahami arti nilai pengembalian get_toc(), menguasai aturan verifikasi untuk level dan nomor halaman, serta mengetahui situasi mana yang harus diubah menjadi verifikasi manual. Artikel ini menggunakan sampel sintetis untuk mendemonstrasikan metode pemrosesan, dan kode telah diperiksa oleh sampel di lingkungan yang terisolasi, namun ini tidak mewakili jaminan semua file nyata atau efek produk. Sebelum memproses dokumen penting, harap simpan dokumen asli dan tinjau sesuai dengan batasan dan item penerimaan dalam teks.

Apa yang harus saya lakukan jika halaman daftar isi PDF dapat diklik, tetapi hierarkinya hilang setelah ekstraksi? Kesimpulan satu kalimat

Verifikasi dulu, lalu tulis: Level bookmark harus dicentang terlebih dahulu, item pertama dianggap sebagai level pertama, level selanjutnya tidak boleh melebihi item sebelumnya ditambah satu, dan entri dengan nomor halaman di luar batas tidak akan ditulis.

situasi AndaPraktik yang direkomendasikanalasan
Halaman direktori dapat diklik, dan hierarki menjadi datar atau tidak sejajar setelah ekstraksi.Pertama gunakan get_toc() untuk mendapatkan daftar aslinya, lalu verifikasi satu per satu sebelum menggunakannya.Daftar asli yang dikembalikan oleh get_toc() tidak memiliki validasi terstruktur
Nomor halamannya 0 atau melebihi jumlah halaman keseluruhanBuang entri dan logNomor halaman di luar batas akan menyebabkan kegagalan lompatan
get_toc() mengembalikan daftar kosongGunakan analisis tata letak teks dan jangan mencoba lagi secara membabi butaFile mungkin tidak memiliki metadata bookmark yang tertanam
Judul yang sama berhubungan dengan beberapa nomor halaman berbedaTandai sebagai ambigu, transfer ke verifikasi manualTidak dapat secara otomatis menentukan nomor halaman mana yang benar

Mengapa hasil ekstraksi kehilangan level?

get_toc() secara default mengeluarkan daftar tripel [level, title, page]. Diantaranya, page adalah nomor halaman fisik yang dimulai dari 1, dan level hanya mewakili kedalaman sarang dan tidak menjamin kesinambungan atau legalitas.

Jika PDF sumber dihasilkan oleh alat penggabungan pemindaian, masalah umum meliputi:

  • Level Jump: Misalnya, lompat langsung dari 1 ke 3
  • Pengecualian nomor halaman: Nomor halaman adalah 0 atau melebihi jumlah halaman total
  • Pengecualian judul: Judul berisi karakter kontrol

Jika digunakan secara langsung untuk tugas-tugas hilir, ini akan menyebabkan kebingungan dalam segmen terjemahan atau kegagalan tautan. Lebih berbahaya lagi, beberapa PDF memiliki halaman daftar isi visual tetapi tidak ada metadata bookmark yang tertanam. Adalah normal bagi get_toc() untuk mengembalikan daftar kosong saat ini, dan analisis tata letak teks perlu digunakan sebagai gantinya.

Contoh komposisi mandiri

Lihat daftar impor untuk contoh dependensi. Kode membuat masukan dalam memori, dan catatan proses disediakan secara terpisah dan tidak mewakili jaminan semua file sebenarnya.

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

Aturan pemrosesan untuk input legal dan ilegal

Input yang benar harus memenuhi: daftar tripel dengan level berkelanjutan dan nomor halaman dalam rentang [1, doc.page_count]. Misalnya, [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] legal, level kedua muncul setelah level pertama, dan sesuai dengan sintaks kerangka PDF.

Input salah yang umum meliputi:

  • Levelnya 0 atau negatif
  • Nomor halaman adalah 0
  • Jumlah halaman melebihi jumlah halaman keseluruhan
  • Judul berupa string kosong atau hanya berisi karakter spasi

Untuk situasi ini, metode yang diberikan dalam artikel adalah sebagai berikut:

  1. Lewati entri dengan nomor halaman yang tidak valid dan catat peringatan.
  2. Simpan placeholder seperti [untitled] untuk judul kosong guna menjaga integritas struktural.
  3. Jangan hentikan penguraian seluruh direktori karena satu kesalahan.

Mengenai kasus dimana levelnya kurang dari 1, ada dua strategi yang harus diperhatikan: bagian ringkasan dari contoh advokat menolak level ilegal dan tidak secara otomatis memperbaikinya, sedangkan deskripsi aturan dalam artikel adalah memaksanya menjadi 1. Silakan putuskan di antara keduanya sesuai dengan proses Anda. Perhatikan juga bahwa aturan ini dirancang untuk memastikan ketahanan proses hilir dan bukan merupakan persyaratan wajib standar PDF. Pengujian sebenarnya menemukan bahwa ketika nomor halaman melewati batas, PyMuPDF akan mencetak peringatan tetapi tidak memberikan pengecualian. Oleh karena itu, fungsi verifikasi harus memfilter secara aktif dan tidak dapat mengandalkan perilaku perpustakaan.

📊 Perbandingan inti

Dalam situasi dokumen yang berbeda, hasil dan metode pemrosesan get_toc() yang disarankan berbeda:

Status dokumenHasil get_toc()Penanganan yang direkomendasikan
Ditandai dan secara struktural legalKembalikan daftar tripletGunakan langsung setelah verifikasi
Bookmark memang ada, tetapi hierarki atau nomor halaman tidak normalMengembalikan daftar pengecualianFilter dan catat log, lalu pindahkan ke kerja manual bila diperlukan
Versi visual memiliki halaman daftar isi tetapi tidak memiliki bookmarkKembali ke daftar kosongBeralih ke analisis tata letak teks
Mengatur ulang dokumen seperti EPUBFormat nomor halaman adalah (bab, pno)Logika verifikasi nomor halaman ini tidak berlaku dan memerlukan pemrosesan khusus

Kriteria Penerimaan dan Batasan Tinjauan Manual

Tabel di bawah ini hanya fokus pada tahap ekstraksi metadata katalog PDF:

Amati fenomena iniKeputusan untuk menangani masalah iniApakah otomatisasi cocok
Nomor halaman adalah 0 atau lebih besar dari total jumlah halamanBuang entri dan catatYa
Level kurang dari 1 atau non-bilangan bulatTangani sesuai aturan di atas (lihat penjelasan sebelumnya)Ya
Judul-judul tersebut bisa benar-benar kosong atau murni simbolisGanti dengan [untitled]Ya
Level lompat (misalnya, 1 sampai 3)Pertahankan layer asli tanpa mengisi layer tengahYa (secara struktural legal)
Judul yang sama sesuai dengan beberapa nomor halaman yang berbedaDitandai sebagai ambigu, diubah menjadi manualTidak
Lebih dari 200 entri tanpa perubahan hierarkisDugaan salah identifikasi OCR memerlukan verifikasi manualTidak
Termasuk aksi URI eksternal atau JavaScriptSaring pengalihan non-halamanYa (Kebijakan Keamanan)
Susun ulang dokumen seperti EPUB, nomor halaman (bab, pno)Logika validasi nomor halaman ini tidak berlakuTidak (memerlukan perlakuan khusus)

Perlu dicatat bahwa demonstrasi kode hanya memeriksa legalitas struktural; efek end-to-end juga perlu dikombinasikan dengan rendering untuk memverifikasi akurasi lompatan.

🎯 Metode mana yang cocok untukmu?

Jika Anda perlu mengekstrak direktori secara batch

Pertama, lakukan validasi struktural pada hasil get_toc(), lalu tuliskan ke dalam alur kerja berikutnya, dan simpan log untuk verifikasi.

Jika PDF Anda secara visual memiliki daftar isi tetapi diekstrak kosong

Jangan berulang kali mencoba get_toc(); beralih ke analisis dan pemrosesan tata letak teks.

Jika entri direktori Anda memiliki nama yang sama tetapi halaman berbeda

Verifikasi entri ini secara manual; jangan secara otomatis memilih salah satu nomor halaman.

Jika Anda ingin menyerahkan dokumen ke proses terjemahan,

Pertama, pastikan struktur daftar isi yang benar dan nomor halaman sebelum menerjemahkan untuk menghindari kebingungan paragraf.

❓ Pertanyaan yang Sering Diajukan (FAQ)

1. Mengapa nomor halaman dimulai dari 1, sementara indeks halaman biasanya dimulai dari 0?

Nomor halaman bookmark adalah nomor halaman fisik yang dimulai dari 1, sedangkan indeks halaman di pustaka seperti PyMuPDF biasanya dimulai dari 0. Perbedaan ini penting saat konversi, jika tidak nomor halaman bisa tidak sejajar.

2. get_toc(): Apakah mengembalikan daftar kosong berarti ada masalah file?

Tidak selalu. Beberapa PDF secara visual memiliki halaman daftar isi tetapi tidak memiliki metadata bookmark yang tertanam, sehingga mengembalikan daftar kosong adalah hal yang normal. Dalam kasus ini, analisis tata letak teks sebaiknya digunakan.

3. Jika nomor halaman keluar dari batas, apakah perpustakaan akan langsung melaporkan kesalahan?

Tidak. Pengujian dalam artikel ini menunjukkan bahwa PyMuPDF mencetak peringatan saat nomor halaman keluar dari batas tetapi tidak melemparkan pengecualian, sehingga fungsi validasi harus memfilter secara aktif.

4. Apakah lompatan hierarkis (seperti langsung dari 1 ke 3) mengharuskan mengisi lapisan tengah?

Saran dalam artikel adalah mempertahankan hierarki asli dan tidak mengisi lapisan tengah, karena struktur ini masih sah.

📝 Ringkasan

Hierarki dan nomor halaman direktori PDF perlu diperiksa sebelum digunakan, sehingga output asli get_toc() tidak dapat langsung dianggap sebagai struktur yang andal. Jika menemukan ambiguitas atau kurangnya bookmark, segera beralih ke pekerjaan manual atau beralih ke metode lain untuk menghindari kesalahan proses selanjutnya.

Rasakan sekarang: Unggah dokumen Anda untuk mulai menerjemahkan, mempertahankan format asli

Referensi dan Langkah Selanjutnya

Langkah berikutnya adalah menyiapkan PDF uji yang berisi masalah direktori yang diketahui, menjalankan skrip verifikasi di atas, dan menghitung proporsi berbagai anomali. Jika sering terjadi lompatan hierarkis atau offset nomor halaman, pertimbangkan untuk menambahkan langkah rekonstruksi daftar isi sebelum penerjemahan.

Gunakan daftar periksa ini untuk terjemahan dokumen

Pertama, periksa urutan halaman, lokasi sumber, dan integritas teks dengan cermat, lalu kirimkan sampel desensitisasi yang sama ke proses terjemahan. Setelah diterjemahkan, masih perlu diperiksa apakah judul, teks utama, dan keterangan sesuai dengan benar; tidak cukup hanya menilai dari kelancaran teks.

OmniDoc menyediakan portal terjemahan dokumen multi-format, dan situs resmi memperkenalkan OCR, glosarium, serta fitur referensi dwibahasa. Bagi tim yang ingin memulai langsung dari file, ini adalah jalur yang layak dievaluasi dengan sampel nyata. Silakan gunakan file anonim yang telah Anda otorisasi untuk unggah dan verifikasi hasilnya dengan daftar periksa di artikel ini. Ini tidak mengklaim bahwa OmniDoc menggunakan pustaka open-source atau algoritma internal dari artikel ini, juga tidak menggantikan pengujian kinerja produk dengan contoh.

Diperbarui 2026-11-15