Sebelum mengompresi PDF, putuskan apakah Anda dapat menerima kehilangan gambar
Sebelum mengompresi PDF, pikirkan apakah Anda dapat menerima kehilangan gambar. Artikel ini hanya membahas kompresi aliran konten tanpa kehilangan: byte yang didekodekan dan teks yang diekstraksi harus konsisten sebelum dan sesudah kompresi. Ini tidak menjamin bahwa setiap PDF akan lebih kecil, juga tidak membingungkan kompresi lossless dengan pengkodean ulang JPEG lossy.
-remove_images() menghapus gambar sepenuhnya daripada mengompresnya, dan tidak boleh digunakan selama persiapan terjemahan kecuali jelas bahwa gambar tidak diperlukan.
Sebelum mengompresi PDF, Anda harus terlebih dahulu menentukan apakah kehilangan gambar dapat diterima. Jika Anda ingin memperkecil PDF sebelum diterjemahkan, hal terpenting yang harus dipahami adalah: operasi mana yang hanya mengatur ulang struktur penyimpanan, dan operasi mana yang akan mengubah konten gambar.
Artikel ini ditulis untuk penerjemah dan teknisi dokumen yang perlu memproses PDF terlebih dahulu. Ini hanya membahas kompresi aliran konten tanpa kehilangan. Kriteria penerimaannya adalah byte yang didekodekan dan teks yang diekstraksi konsisten sebelum dan sesudah kompresi. Setelah membaca, Anda dapat menilai langkah mana yang tepat, langkah mana yang akan menyebabkan kerugian permanen, dan cara memeriksa hasil setelah kompresi.
Contoh di bawah ini menggunakan sampel sintetis dan kodenya telah diperiksa dengan sampel di lingkungan terisolasi, namun hal ini tidak menjamin semua file atau performa produk sebenarnya. Sebelum memproses dokumen penting, harap simpan dokumen asli dan tinjau sesuai dengan batasan dan item penerimaan dalam teks.
Bisakah saya menerima kehilangan gambar sebelum mengompresi PDF? Kesimpulan satu kalimat
Pertama-tama tentukan apakah Anda dapat menerima kehilangan gambar: Jika Anda tidak dapat menerimanya, cukup lakukan kompresi lossless pada aliran konten, dan gunakan byte yang didekodekan dan pembacaan kembali teks untuk penerimaan.
| situasi Anda | Praktik yang direkomendasikan | alasan |
|---|---|---|
| Perlu melestarikan gambar dan tata letak, hanya ingin mengatur struktur penyimpanan | Kompresi aliran konten tanpa kehilangan | Byte yang didekode dan teks yang diekstraksi harus sama sebelum dan sesudah kompresi |
| Hanya diperlukan konten teks biasa, tidak diperlukan gambar | Pertimbangkan untuk menghapus gambar tersebut | remove_images() sepenuhnya terhapus dan tidak dapat diubah |
| Saya harap filenya akan lebih kecil | Tes sebenarnya dulu, tidak ada jaminan | Kompresi lossless tidak menjamin setiap PDF akan berukuran lebih kecil |
| Memerlukan kompresi gambar yang lossy | Mengevaluasi pengodean ulang JPEG satu per satu | Ini adalah operasi yang berbeda dari kompresi aliran lossless dan tidak dapat disalahartikan |
Masalah mana yang harus diselesaikan terlebih dahulu di artikel ini?
Artikel ini hanya memeriksa kompresi aliran konten yang lossless: byte yang didekodekan dan teks yang diekstraksi harus sama sebelum dan sesudah kompresi. Itu tidak menjanjikan bahwa setiap PDF akan lebih kecil, juga tidak membingungkan kompresi aliran lossless dengan pengkodean ulang JPEG lossy.
Contoh komposisi mandiri
Lihat daftar impor untuk dependensi. Kode membuat masukan dalam memori, dan catatan proses disediakan secara terpisah dan tidak mewakili jaminan semua file sebenarnya.
from io import BytesIO
import pymupdf
from pypdf import PdfReader, PdfWriter
with pymupdf.open() as source:
page = source.new_page()
page.insert_text((50, 50), "Compression sample")
raw = source.tobytes()
writer = PdfWriter(clone_from=BytesIO(raw))
before = writer.pages[0].get_contents().get_data()
writer.pages[0].compress_content_streams()
out = BytesIO()
writer.write(out)
out.seek(0)
reader = PdfReader(out)
assert reader.pages[0].get_contents().get_data() == before
assert "Compression sample" in reader.pages[0].extract_text()
assert len(reader.pages) == 1
Batasan kompresi lossless
- Setelah aliran konten dikompresi, byte yang didekodekan harus konsisten dengan teks yang diekstraksi.
- Jalur vektor teks, penyematan font, dan data piksel mentah gambar tidak diubah.
- Anda dapat memasukkan langkah ini ke tahap pra-pemrosesan terjemahan sebagai bagian dari proses standardisasi tanpa khawatir akan merusak keterbacaan teks aslinya.
- Catatan:
compress_content_streamstidak menerima parameter tingkat kompresi dan menggunakan konfigurasi default zlib secara internal. Lihat dokumen pypdf untuk spesifikasi antarmuka.
Penggantian gambar adalah operasi yang merugikan dan tidak dapat diubah
remove_images() adalah penghapusan total, bukan kompresi. Ini tidak boleh digunakan selama persiapan terjemahan kecuali Anda mengetahui dengan pasti bahwa skenario target tidak memerlukan gambar (misalnya ekstraksi teks biasa).
Banyak orang secara keliru percaya bahwa "mengompresi gambar" sama dengan "optimasi cerdas". Faktanya, pypdf hanya melakukan pengodean ulang mekanis dan tidak memiliki kemampuan untuk memahami semantik konten.
Contoh sintesis menunjukkan perbedaan antara dua jalur kompresi
Kode berikut membuat PDF yang berisi gambar berulang dan konten multi-halaman, masing-masing menunjukkan efek kompresi struktur lossless dan pemrosesan gambar lossy. Catatan: Ini adalah kode pengajaran yang telah lulus pemeriksaan sampel sintetis. Ini hanya digunakan untuk mengilustrasikan batasan perilaku API. Harap verifikasi di lingkungan lokal sebelum penggunaan sebenarnya.
Keputusan penanganan pengecualian khusus
| mengamati | apa yang harus dilakukan | tidak boleh disimpulkan |
|---|---|---|
| Decoding perubahan aliran | Persyaratan non-destruktif dalam perkara ini dinilai tidak terpenuhi. | Simpan yang asli |
| Ukurannya tidak berkurang | Rekam dengan jujur | Kompresi sukses semua PDF tidak dijamin |
| Teks dibaca kembali secara konsisten | Selesaikan pemeriksaan | Render yang rumit masih memerlukan perbandingan |
Gunakan daftar periksa ini untuk terjemahan dokumen
Pemisahan file, enkripsi, atau pemrosesan lampiran adalah bagian dari persiapan pengiriman dan terjemahan tidak dapat menggantikan pemeriksaan ini. Disarankan untuk menyimpan salinan asli dan daftar pemrosesan terlebih dahulu, lalu mengevaluasi urutan halaman, tautan, dan integritas konten terjemahan.
📊 Perbandingan inti
| Ukuran | Kompresi aliran konten lossless | remove_images() menghapus gambar | Pengodean ulang JPEG yang hilang |
|---|---|---|---|
| Apakah akan mengubah byte yang didekodekan | Penerimaan memerlukan decoding byte yang konsisten | Konten gambar akan dihapus | Ini adalah operasi lossy dan tidak bisa disamakan dengan kompresi lossless. |
| Konten gambar | Data piksel asli gambar tidak diubah | Hapus sepenuhnya | Pengkodean ulang yang merugikan |
| Teks dan pengaturan huruf | Teks yang diekstraksi harus konsisten | Bukan menargetkan teks, tapi gambar dihilangkan | Hal ini tidak termasuk dalam cakupan pemeriksaan non-destruktif artikel ini |
| Apakah itu bisa dibalik? | Penerimaan sesuai dengan persyaratan non-destruktif | Tidak dapat diubah | rugi |
| Apakah volumenya menjadi lebih kecil? | Tidak ada jaminan bahwa setiap PDF akan berukuran lebih kecil | Volume berubah tergantung pada situasi sebenarnya dari file tersebut | Tergantung pada hasil pemrosesan sebenarnya |
🎯 Metode mana yang cocok untuk Anda?
Jika Anda perlu menyimpan gambar dan tipografi
- Gunakan kompresi aliran konten tanpa kehilangan dan tinjau dengan byte yang didekodekan dan pembacaan kembali teks.
Jika Anda hanya membutuhkan konten teks biasa
- Anda dapat mempertimbangkan untuk menghapus gambar, tetapi konfirmasikan terlebih dahulu bahwa gambar tersebut tidak diperlukan untuk adegan target.
Jika Anda ingin volume menjadi lebih kecil secara signifikan setelah kompresi
- Gunakan sampel asli Anda untuk mengukurnya terlebih dahulu, jangan berasumsi pasti akan menjadi lebih kecil.
Jika Anda perlu memproses file penting
- Simpan dokumen aslinya terlebih dahulu, dan tinjau hasilnya sesuai dengan batasan dan butir penerimaan dalam teks.
❓ Pertanyaan yang Sering Diajukan (FAQ)
1. Apakah kompresi lossless akan mengubah gambar?
Menurut kriteria penerimaan artikel ini, data piksel asli gambar tidak akan diubah setelah kompresi aliran konten lossless, dan byte yang didekode serta teks yang diekstraksi harus konsisten.
2. Apakah PDF akan menjadi lebih kecil setelah dikompresi?
tidak pasti. Artikel ini tidak menjanjikan bahwa setiap PDF akan menjadi lebih kecil. Apabila ukurannya tidak mengecil, hendaknya dicatat dengan sebenar-benarnya.
3. Bisakah compress_content_streams mengatur tingkat kompresi?
Tidak bisa. Fungsi ini tidak menerima parameter tingkat kompresi dan secara internal menggunakan konfigurasi default zlib.
4. Bisakah remove_images() digunakan sebagai kompresi gambar?
Tidak bisa. Ini menghapus gambar sepenuhnya, bukan mengompresnya, dan tidak boleh digunakan dalam tahap persiapan terjemahan kecuali gambar tersebut benar-benar tidak diperlukan untuk adegan target.
📝 Ringkasan
Sebelum mengompresi PDF, tentukan terlebih dahulu apakah Anda dapat menerima kehilangan gambar, lalu pilih metode pemrosesan yang sesuai. Kompresi aliran konten lossless cocok untuk skenario di mana tampilan asli perlu dipertahankan, dan byte yang didekodekan serta pembacaan kembali teks digunakan sebagai kriteria penerimaan.


