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 AndaPraktik yang direkomendasikanalasan
Program font kosongCatatan tidak diekstraksi ke penyemat dan mengonfirmasi situasi halamanReferensi Base14 tidak sama dengan font yang disematkan
menemukan subset fontJaga identitas fontFont subset tidak sama dengan kerusakan
Daftar font kosongKonfirmasikan konten halamanHalaman tersebut mungkin berupa gambar atau jalur lain yang digambar
Perlu memproses file nyataPeriksa dengan sampel yang tidak peka terlebih dahuluKode 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

mengamatiapa yang harus dilakukantidak boleh disimpulkan
Program font kosongCatatan tidak diambil ke penyematKutipan Base14 tidak sama dengan penyematan
font subsetJaga identitas fontTidak ada penentuan kerusakan secara langsung
Daftar kosongKonfirmasikan konten halamanMungkin 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.

Coba sekarang: Unggah dokumen untuk memulai penerjemahan, dengan tetap mempertahankan tata letak aslinya

Diperbarui 2026-11-15