Sebelum menyerahkan tugas terjemahan PDF, periksa font terlebih dahulu daripada terburu-buru mengganti font.
Daftar font default memiliki panjang yang berbeda dari tupel yang dikembalikan oleh full=True. Selanjutnya, baca enam item pertama, lalu periksa apakah byte font yang dikembalikan oleh ekstrak_font kosong. Referensi font Base14 tidak berarti font tersebut tertanam dalam program; subset font juga tidak boleh dianggap sebagai kesalahan.
Ketika banyak orang mendapatkan PDF untuk diterjemahkan, hal pertama yang terlintas di benak mereka adalah langsung mengubahnya ke Siyuan Heibo atau Arial. Hal ini sering menimbulkan masalah pada saat penyampaian: simbol matematika menjadi persegi, nomor tabel tidak sejajar, atau terjemahannya tidak dapat dibuka pada pembaca tertentu. Artikel ini ditulis untuk pengembang dan pemilik dokumen yang perlu mengambil alih tugas penerjemahan PDF. Setelah membaca, Anda akan mengetahui cara menggunakan PyMuPDF untuk menginventarisasi font, cara menafsirkan hasil yang dikembalikan, dan kesimpulan mana yang tidak dapat diambil berdasarkan keluaran kode saja.
Tujuan inventaris font adalah untuk memastikan kemampuan pengeditan teknis dan stabilitas rendering, bukan untuk melakukan audit kepatuhan hukum. Daftar font default berbeda dari panjang tupel yang dikembalikan oleh full=True. Saat membaca, enam item pertama harus diambil, lalu periksa apakah byte font yang dikembalikan oleh extract_font kosong. Referensi font Base14 tidak berarti font tersebut tertanam dalam program, dan subsetting font tidak selalu dianggap sebagai kesalahan.
Satu kalimat kesimpulan
Inventarisasi font terlebih dahulu, lalu tentukan jalur terjemahannya. Jangan mengubah font secara global sebelum mengekstraksi teks.
| situasi Anda | Praktik yang direkomendasikan | alasan |
|---|---|---|
| Program font kosong | Catatan tidak diekstraksi ke penyemat dan mengonfirmasi situasi halaman | Referensi Base14 tidak sama dengan font yang disematkan |
| menemukan subset font | Jaga identitas font | Font subset tidak sama dengan kerusakan |
| Daftar font kosong | Konfirmasikan konten halaman | Halaman tersebut mungkin berupa gambar atau jalur lain yang digambar |
| Perlu memproses file nyata | Periksa dengan sampel yang tidak peka terlebih dahulu | Kode contoh tidak mewakili efek pada semua file sebenarnya |
Mengapa kami tidak bisa langsung mengganti font secara global?
Mengganti font secara langsung akan menghadapi beberapa masalah umum:
- Simbol matematika pada teks asli menjadi persegi.
- Penjajaran angka yang sama lebarnya dalam tabel tidak valid.
- Font yang dibatasi disematkan, menyebabkan terjemahan tidak terbuka di beberapa pembaca.
Oleh karena itu, sebelum memulai ekstraksi teks atau rekonstruksi penyusunan huruf, lakukan inventarisasi font pada dokumen. `get_page_fonts()` adalah pemeriksaan dasar yang disediakan oleh PyMuPDF, yang dapat memberi tahu Anda sumber daya font mana yang sebenarnya direferensikan oleh setiap halaman, apakah sumber tersebut tersemat sepenuhnya, dan jenis pengkodeannya. Informasi ini menentukan apakah OCR, penggantian langsung, atau penataan ulang manual harus digunakan di masa mendatang.
Poin-poin penting dalam membaca informasi font
- Daftar font default memiliki panjang yang berbeda dari tupel yang dikembalikan oleh
full=True, yang dibaca sebagai enam item pertama. - Jika program font kosong, berarti byte font yang tertanam tidak terekstraksi.
- Subset font hanya perlu mempertahankan pengidentifikasi font, dan jangan langsung menilainya sebagai kesalahan.
Pengujian sintetik: konstruksi memori dan verifikasi pernyataan
Agar contoh dapat dijalankan secara terpisah, kami membuat test case yang sepenuhnya mandiri. Daripada mengandalkan file eksternal, skrip menggunakan PyMuPDF untuk membuat PDF yang berisi font standar di memori dan kemudian segera melakukan inventarisasi font di dalamnya. Hal ini tidak hanya menjamin reproduktifitas, namun juga menghindari risiko hak cipta dan privasi.
import pymupdf
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((72, 72), "Font sample", fontname="helv")
fonts = doc.get_page_fonts(0, full=True)
assert fonts
report = []
for item in fonts:
xref, ext, kind, basefont, name, encoding = item[:6]
extracted_name, extracted_ext, extracted_type, data = doc.extract_font(xref)
report.append({"name": basefont, "font_program_present": bool(data),
"xref": xref, "encoding": encoding})
assert report[0]["name"] == "Helvetica"
assert report[0]["font_program_present"] is False
assert report[0]["xref"] > 0
Pengujian ini memiliki batasan yang jelas: objek font sintetis yang "rusak" atau "tidak tertanam" tidak dapat dibuat di memori tanpa membawa file font eksternal. Oleh karena itu, pengujian ini berfokus pada dua hal: memverifikasi keakuratan penguraian font normal yang tersemat, dan penanganan defensif fungsi terhadap nomor halaman yang tidak valid. Cabang pengecualian perlu diuji secara individual. Kode demo berjalan di lingkungan yang terisolasi, tetapi ini tidak menjamin semua file nyata atau kinerja produk.
Kriteria penerimaan dan batasan tinjauan manual
Keluaran "aman" atau "peringatan" dari suatu kode hanyalah sinyal teknis dan tidak dapat secara langsung disamakan dengan kelayakan terjemahan. Skrip dapat melaporkan status penyematan secara akurat, namun tidak dapat mengetahui apakah font memiliki mesin terbang yang sesuai dalam bahasa target, juga tidak dapat mengevaluasi apakah lisensi mengizinkan modifikasi penyematan. Keputusan-keputusan ini perlu dibuat oleh orang-orang yang berada dalam konteks proyek.
Keputusan penanganan pengecualian khusus
| mengamati | apa yang harus dilakukan | tidak boleh disimpulkan |
|---|---|---|
| Program font kosong | Catatan tidak diambil ke penyemat | Kutipan Base14 tidak sama dengan penyematan |
| font subset | Jaga identitas font | Tidak ada penentuan kerusakan secara langsung |
| Daftar kosong | Konfirmasikan konten halaman | Mungkin berupa gambar atau jalur lain yang digambar |
Sebelum memproses dokumen penting, harap menyimpan dokumen asli dan memeriksanya sesuai dengan batasan dan item penerimaan di atas.
🎯 Metode mana yang cocok untuk Anda?
Jika Anda baru saja menerima PDF untuk diterjemahkan
Lakukan inventarisasi font terlebih dahulu sebelum memutuskan jalur mana yang akan diambil. Jangan terburu-buru mengganti font.
Jika hasil deteksi menunjukkan font program kosong
Dokumentasikan ini dan konfirmasikan konten halaman, jangan perlakukan seolah-olah penyematan telah selesai.
Jika ada subset font di dokumen
Pertahankan logo font dan perlakukan itu sebagai situasi normal daripada langsung menilainya sebagai kesalahan.
Jika Anda perlu memverifikasi dengan file asli
Gunakan sampel yang tidak peka yang Anda punya izin untuk mengunggahnya dan periksa kembali hasilnya menggunakan daftar periksa di artikel ini.
❓ Pertanyaan yang Sering Diajukan (FAQ)
1. Apakah referensi font Base14 berarti font tersebut telah tertanam?
TIDAK. Referensi font Base14 tidak berarti program font telah tertanam. Anda perlu memeriksa apakah byte font yang dikembalikan oleh extract_font kosong.
2. Apakah ada yang salah dengan font subset?
tidak pasti. Subset font tidak boleh dinilai sebagai kesalahan sama sekali. Simpan saja logo fontnya dan jangan langsung menilainya rusak.
3. Jika daftar font kosong, apakah berarti ada masalah pada halamannya?
tidak pasti. Jika daftarnya kosong, Anda harus mengonfirmasi konten halaman terlebih dahulu. Halaman tersebut mungkin berupa gambar atau jalur gambar lainnya.
4. Bisakah hasil skrip yang "aman" digunakan secara langsung dalam keputusan penerjemahan?
tidak bisa. Keluaran kode hanyalah sinyal teknis dan tidak dapat mengetahui apakah mesin terbang bahasa target tersedia atau apakah lisensi mengizinkan modifikasi penyematan.
📝 Ringkasan
Inventaris font adalah langkah dasar sebelum terjemahan PDF. Ini membantu Anda menilai kemampuan edit dan stabilitas rendering dokumen. Setelah mendapatkan file, periksa dulu fontnya lalu pilih jalurnya. Setelah diterjemahkan, Anda masih perlu memeriksa kesesuaian antara judul, teks, dan legenda.


