Ke mana perginya daftar isi setelah menggabungkan PDF: pertama-tama tentukan aturan penyimpanan bookmark
Saat menggabungkan, putuskan terlebih dahulu apakah akan mengimpor direktori asli. Jika Anda ingin membuat entri tingkat atas sendiri, Anda harus secara eksplisit import_outline=False untuk menghindari pencampuran impor default dengan rekonstruksi manual. Ini hanya menunjukkan nomor halaman dan offset direktori, dan tidak berhubungan dengan isolasi bidang formulir.
Setelah menggabungkan beberapa PDF, penanda dan daftar isi sering kali mengalami kesalahan: bilah navigasi kiri mungkin kosong, dan mengeklik penanda dapat melompat ke halaman kesalahan. Artikel ini ditulis untuk pengembang dan pemroses dokumen yang perlu menggunakan skrip untuk menyambung PDF. Setelah membaca ini, Anda akan mengetahui apa yang harus diputuskan sebelum menggabungkan, cara memverifikasi keluaran dengan sampel sintetis, dan hasil mana yang harus ditinjau secara manual.
Kode dan contoh di sini semuanya menggunakan sampel sintetis, yang hanya mendemonstrasikan ide pemrosesan nomor halaman dan offset direktori, dan tidak melibatkan isolasi bidang formulir. Catatan yang berjalan hanya menggambarkan kinerja sampel dalam lingkungan yang terisolasi dan tidak menjamin pengaruh semua file sebenarnya. Harap simpan dokumen asli sebelum menangani dokumen penting.
Kemana perginya daftar isi setelah menggabungkan PDF? Kesimpulan satu kalimat
Saat menggabungkan, putuskan terlebih dahulu apakah akan mengimpor direktori asli; jika Anda ingin membuat entri tingkat atas sendiri, atur import_outline=False secara eksplisit untuk menghindari pencampuran impor default dan rekonstruksi manual.
| situasi Anda | Praktik yang direkomendasikan | alasan |
|---|---|---|
| Perlu menyimpan bookmark file sumber | Buat keputusan yang jelas untuk mengimpor direktori asli saat menggabungkan | Perilaku default mungkin tercampur dengan pembuatan ulang manual |
| Buat pintu masuk tingkat atas Anda sendiri | Tetapkan import_outline=False secara eksplisit | Hindari impor default yang dicampur dengan pembuatan ulang manual |
| Bookmark salah tempat setelah menggabungkan beberapa dokumen | Periksa offset awal file kedua | Penanda mungkin masih mengarah ke halaman pertama |
| Bersiaplah untuk memberikan hasil yang terkonsolidasi | Tambahkan jumlah total halaman dan jumlah setiap halaman masukan yang akan diperiksa. Jika ada perbedaan maka tidak akan dikirimkan. | Eksekusi kode yang berhasil tidak berarti kiriman tersedia |
| Pembaca yang sama perlu dimasukkan beberapa kali | Hubungi reset_translation sebelum setiap penyisipan | Jika tidak, mengubah satu tempat dapat mempengaruhi tempat lain |
Mengapa direktori hilang setelah penggabungan?
Setelah menggunakan PdfWriter.append() untuk menggabungkan beberapa PDF, Anda mungkin mendapati bilah navigasi kiri kosong atau bookmark berpindah ke halaman yang salah saat Anda membuka file keluaran. Ini adalah masalah umum pada operasi penggabungan pypdf.
Masalahnya biasanya bukan pada tindakan "penggabungan" itu sendiri, tetapi pada penanda file sumber (Garis Besar) yang menunjuk ke nomor halaman atau referensi objek internal dari dokumen asli. Setelah beberapa dokumen disambung ke dalam file baru, nomor halaman fisik diimbangi, tetapi pohon penanda lama tidak secara otomatis memperbarui offset ini.
Ada situasi lain yang lebih halus: file sumber menggunakan tujuan bernama, bukan nomor halaman absolut, dan tujuan dengan nama yang sama ada di file sumber berbeda. File yang ditambahkan kemudian akan menimpa definisi sebelumnya, menyebabkan link menjadi tidak valid.
Contoh sintesis: pertama-tama tentukan batas masukan dan keluaran yang diharapkan
Untuk memverifikasi kekuatan logika penggabungan, serangkaian sampel sintetik yang terkontrol perlu dibuat daripada mengandalkan dokumen nyata dengan struktur yang bervariasi. Contoh ini mengasumsikan dua file sumber untuk pengujian.
Skenario kesalahan atau masukan batas: Jika Anda menambahkan dua file secara langsung tanpa pemrosesan awal apa pun, hasil berikut mungkin terjadi:
- Hanya satu bidang
user_namedalam formulir yang dapat diedit, bidang lainnya dikaburkan atau data hilang. - Semua bookmark mengarah ke rentang halaman source_a, atau kesalahan dilaporkan saat mengklik bookmark yang sesuai dengan source_b.
Kegagalan diam-diam ini lebih mengkhawatirkan daripada kerusakan program karena merusak kegunaan dokumen tanpa memberikan pengecualian.
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.
from io import BytesIO
from pypdf import PdfReader, PdfWriter
def source(pages):
writer = PdfWriter()
for _ in range(pages):
writer.add_blank_page(width=200, height=200)
out = BytesIO()
writer.write(out)
return out.getvalue()
writer = PdfWriter()
for title, raw in [("Part A", source(2)), ("Part B", source(1))]:
start = len(writer.pages)
writer.append(PdfReader(BytesIO(raw)), import_outline=False)
writer.add_outline_item(title, start)
out = BytesIO()
writer.write(out)
reader = PdfReader(BytesIO(out.getvalue()))
assert len(reader.pages) == 3
assert len(reader.outline) == 2
assert reader.get_destination_page_number(reader.outline[0]) == 0
assert reader.get_destination_page_number(reader.outline[1]) == 2
Kriteria penerimaan dan batasan tinjauan manual untuk hasil gabungan
Eksekusi kode yang berhasil tidak berarti bahwa kiriman tersedia. Tabel di bawah mencantumkan poin pengamatan penerimaan untuk menggabungkan PDF dan membedakan mana yang dapat diverifikasi secara otomatis dan mana yang memerlukan intervensi manual. Standar ini berlaku untuk validasi keluaran alat penggabungan PDF apa pun.
| mengamati | apa yang harus dilakukan | tidak boleh disimpulkan |
|---|---|---|
| Jumlah total halaman gabungan | Periksa dengan jumlah halaman masukan yang ditambahkan | Tidak dikirimkan jika ada perbedaan |
| katalog kedua | Periksa offset awal | Masih tidak bisa menunjuk ke halaman pertama |
| Kebijakan retensi direktori sumber | Perjelas nilai import_outline | Hindari direktori duplikat |
Selain itu, perhatikan metode reset_translation. Jika Anda ingin menyisipkan halaman berbeda dari PDF yang sama ke dalam output beberapa kali, Anda harus memanggilnya sebelum setiap penyisipan; Jika tidak, sisipan kedua akan menjadi salinan referensi pertama, dan memodifikasi salah satu akan memengaruhi yang lain. Ini adalah detail tingkat kode, tetapi selama penerimaan end-to-end, sering muncul sebagai "mengubah satu bagian secara tak terduga mengubah bagian lain," yang mudah disalahartikan sebagai bug perangkat lunak.
📊 Perbandingan Inti
| Metode | Skenario yang berlaku | Risiko yang perlu diperhatikan |
|---|---|---|
| Impor ke direktori asli | Struktur bookmark file sumber harus dipertahankan | Anda perlu memastikan bahwa bookmark yang diimpor masih mengarah ke halaman yang benar setelah digabungkan |
Atur import_outline=False secara eksplisit dan buat pintu masuk tingkat atas secara manual | Anda perlu merencanakan struktur navigasi untuk file output sendiri | Hindari pencampuran dengan direktori impor default |
| Langsung tempel tanpa preprocessing | Tes hanya digunakan untuk memahami perilaku default | Penanda buku mungkin tidak sejajar, dan bidang formulir dapat tersembunyi atau hilang |
🎯 Metode mana yang cocok untukmu?
Jika Anda perlu menyimpan direktori file sumber,
Saat menggabungkan, tentukan dengan jelas untuk mengimpor direktori asli, dan setelah menggabungkan, periksa apakah bookmark mengarahkan ke halaman yang benar.
Jika Anda ingin merencanakan titik masuk tingkat atas untuk file output sendiri
Atur import_outline=False secara eksplisit, lalu buat entri tingkat atas secara manual untuk menghindari pencampuran kedua set direktori.
Jika Anda ingin menyisipkan halaman berbeda dari PDF yang sama berkali-kali
Sebelum setiap penyisipan, panggil reset_translation, dan selama penerimaan, periksa apakah memodifikasi satu area memengaruhi posisi lain.
Jika Anda ingin memberikan hasil kepada orang lain
Pertama, periksa total jumlah halaman dan offset awal setiap dokumen sesuai dengan formulir penerimaan; jika ada ketidaksesuaian, jangan kirim langsung.
❓ Pertanyaan yang Sering Diajukan (FAQ)
1. Mengapa bookmark melompat ke halaman yang salah setelah digabungkan?
Bookmark dalam file sumber menunjuk ke nomor halaman asli atau referensi objek internal; setelah digabungkan, nomor halaman fisik bergeser, sementara pohon bookmark lama tidak diperbarui secara otomatis.
2. Apa yang harus Anda perhatikan saat menggunakan target bernama?
Ketika file sumber yang berbeda memiliki target yang sama, penambahan berikutnya akan menimpa definisi sebelumnya, menyebabkan tautan gagal.
3. Jika kode berjalan dengan sukses, apakah itu berarti hasil penggabungan dapat dikirim?
Tidak. Eksekusi kode yang berhasil tidak berarti deliverable dapat digunakan; jumlah halaman, offset, dan bookmark tetap harus diperiksa sesuai standar penerimaan.
4. Mengapa Mengatur import_outline=False Secara Eksplisit?
Hindari mencampur direktori impor default dengan entri tingkat atas yang direkonstruksi secara manual.
📝 Ringkasan
Saat menggabungkan PDF, pertama-tama putuskan apakah akan mengimpor daftar isi asli, lalu gunakan contoh komposit dan formulir penerimaan untuk memeriksa jumlah halaman, offset, dan bookmark. Setelah proses penggabungan selesai, Anda dapat mempertimbangkan untuk memasukkan urutan halaman, tautan, dan kelengkapan isi naskah terjemahan.
Rasakan sekarang: Unggah dokumen Anda untuk mulai menerjemahkan, mempertahankan format asli


