Trước khi giao nhiệm vụ dịch PDF, hãy kiểm tra font chữ trước thay vì vội vàng thay đổi font chữ.

Danh sách phông chữ mặc định có độ dài khác với bộ dữ liệu được trả về bởi full=True. Tiếp theo, đọc sáu mục đầu tiên, sau đó kiểm tra xem các byte phông chữ được extract_font trả về có trống hay không. Tham chiếu phông chữ Base14 không có nghĩa là phông chữ đó được nhúng vào chương trình; phông chữ tập hợp con cũng không nên được coi là một lỗi.

Khi nhiều người nhận được một bản PDF cần dịch, điều đầu tiên họ nghĩ đến là đổi trực tiếp nó thành Siyuan Heibo hoặc Arial. Điều này thường gây ra vấn đề trong quá trình phân phối: các ký hiệu toán học trở thành hình vuông, số bảng bị lệch hoặc bản dịch không thể mở được ở một số trình đọc nhất định. Bài viết này được viết dành cho các nhà phát triển và chủ sở hữu tài liệu, những người cần đảm nhận nhiệm vụ dịch PDF. Sau khi đọc, bạn sẽ biết cách sử dụng PyMuPDF để kiểm kê phông chữ, cách diễn giải kết quả trả về và những kết luận nào không thể rút ra chỉ dựa trên đầu ra mã.

Mục đích của việc kiểm kê phông chữ là để xác nhận khả năng chỉnh sửa kỹ thuật và độ ổn định của kết xuất chứ không phải để tiến hành kiểm tra tuân thủ pháp luật. Danh sách phông chữ mặc định khác với độ dài bộ dữ liệu được full=True trả về. Khi đọc, sáu mục đầu tiên phải được lấy, sau đó kiểm tra xem các byte phông chữ được extract_font trả về có trống hay không. Tham chiếu phông chữ Base14 không có nghĩa là phông chữ được nhúng vào chương trình và việc đặt lại phông chữ không phải lúc nào cũng được coi là lỗi.

Kết luận một câu

Kiểm kê phông chữ trước rồi quyết định đường dẫn dịch. Không thay đổi phông chữ chung trước khi trích xuất văn bản.

hoàn cảnh của bạnCác phương pháp được đề xuấtlý do
Chương trình phông chữ trốngCác bản ghi không được trích xuất vào trình nhúng và xác nhận tình trạng trangTham chiếu Base14 không được nhúng bằng phông chữ
gặp phải phông chữ tập hợp conGiữ nhận dạng phông chữPhông chữ tập hợp con không bằng tham nhũng
Danh sách phông chữ trốngXác nhận nội dung trangTrang này có thể là một hình ảnh hoặc đường dẫn được vẽ khác
Cần xử lý file thậtKiểm tra với các mẫu đã khử độ nhạy trước tiênMã mẫu không thể hiện hiệu ứng trên tất cả các tệp thực

Tại sao chúng ta không thể trực tiếp thay thế phông chữ trên toàn cầu?

Việc thay thế trực tiếp font chữ sẽ gặp một số vấn đề điển hình:

  • Các ký hiệu toán học trong văn bản gốc trở thành hình vuông.
  • Căn chỉnh chiều rộng bằng nhau của các số trong bảng là không hợp lệ.
  • Phông chữ bị hạn chế được nhúng, khiến bản dịch không mở được ở một số độc giả.

Do đó, trước khi bắt đầu trích xuất văn bản hoặc xây dựng lại sắp chữ, hãy thực hiện kiểm kê phông chữ của tài liệu. `get_page_fonts()` là công cụ thăm dò cơ bản do PyMuPDF cung cấp, có thể cho bạn biết tài nguyên phông chữ nào thực sự được mỗi trang tham chiếu, liệu chúng có được nhúng hoàn toàn hay không và loại mã hóa. Thông tin này xác định xem có nên sử dụng OCR, thay thế trực tiếp hay sắp xếp lại thủ công trong tương lai hay không.

Những điểm chính trong việc đọc thông tin font chữ

  • Danh sách phông chữ mặc định có độ dài khác với bộ dữ liệu được full=True trả về, được đọc dưới dạng sáu mục đầu tiên.
  • Khi chương trình phông chữ trống có nghĩa là các byte phông chữ nhúng không được trích xuất.
  • Phông chữ tập hợp con chỉ cần giữ lại mã nhận dạng phông chữ và không trực tiếp đánh giá đó là lỗi.

Thử nghiệm tổng hợp: xây dựng bộ nhớ và xác minh xác nhận

Để cho phép ví dụ chạy độc lập, chúng tôi đã xây dựng một trường hợp thử nghiệm hoàn toàn khép kín. Thay vì dựa vào các tệp bên ngoài, tập lệnh sử dụng PyMuPDF để tạo một tệp PDF chứa các phông chữ tiêu chuẩn trong bộ nhớ và sau đó ngay lập tức kiểm kê phông chữ trên đó. Điều này không chỉ đảm bảo khả năng tái tạo mà còn tránh các rủi ro về bản quyền và quyền riêng tư.

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

Thử nghiệm này có ranh giới rõ ràng: không thể tạo đối tượng phông chữ tổng hợp "bị hỏng" hoặc "không được nhúng" trong bộ nhớ mà không đưa vào tệp phông chữ bên ngoài. Do đó, thử nghiệm này tập trung vào hai việc: xác minh tính chính xác khi phân tích cú pháp của các phông chữ được nhúng thông thường và khả năng xử lý phòng thủ của chức năng đối với số trang không hợp lệ. Các nhánh ngoại lệ cần được kiểm tra riêng lẻ. Mã demo chạy trong một môi trường biệt lập, nhưng điều này không thể hiện sự đảm bảo về tất cả các tệp thực hoặc hiệu suất sản phẩm.

Tiêu chí chấp nhận và ranh giới đánh giá thủ công

Đầu ra "An toàn" hoặc "cảnh báo" từ mã chỉ là tín hiệu kỹ thuật và không thể coi trực tiếp là tính khả thi của bản dịch. Tập lệnh có thể báo cáo chính xác trạng thái nhúng, nhưng nó không thể biết phông chữ có hình tượng tương ứng trong ngôn ngữ đích hay không, cũng như không thể đánh giá liệu giấy phép có cho phép sửa đổi nội dung nhúng hay không. Những quyết định này cần được đưa ra bởi những người trong bối cảnh của dự án.

Quyết định xử lý ngoại lệ cụ thể

quan sátphải làm gìvà không nên bị phán xét
Chương trình phông chữ đang trốngCác bản ghi chưa được trích xuất vào chương trình nhúngTham chiếu Base14 không giống với embedding
Phông chữ ZijiGiữ lại các dấu hiệu phông chữThiệt hại không được đánh giá trực tiếp
Danh sách trốngKiểm tra nội dung trangNó có thể là một hình ảnh hoặc một đường vẽ khác

Trước khi xử lý các tài liệu quan trọng, vui lòng giữ lại bản gốc và xem xét chúng theo các ranh giới và các mục chấp nhận ở trên.

🎯 Phương pháp nào phù hợp với bạn?

Nếu bạn chỉ nhận được một file PDF để dịch

Hãy kiểm tra phông chữ trước, rồi quyết định hướng đi nào; đừng vội thay thế.

Nếu kết quả phát hiện cho thấy chương trình phông chữ đang trống

Ghi lại điều này và xác nhận nội dung trang; đừng cho rằng việc nhúng đã hoàn tất.

Nếu tài liệu chứa các phông chữ con

Giữ lại các ký hiệu phông chữ và xử lý chúng như bình thường thay vì đánh giá trực tiếp là lỗi.

Nếu cần xác minh bằng tài liệu thực

Sử dụng mẫu giảm nhạy cảm mà bạn đã tải lên với sự cho phép của mình, và xác minh kết quả với các mục kiểm tra trong bài viết này.

❓ Câu hỏi thường gặp (FAQ)

1. Tham chiếu phông chữ Base14 có nghĩa là phông chữ đã được nhúng chưa?

Không. Tham chiếu phông chữ Base14 không có nghĩa là chương trình phông chữ được nhúng; bạn cần kiểm tra xem các byte phông chữ trả về bởi extract_font có trống không.

2. Có phải chắc chắn có vấn đề với phông chữ của tập con không?

Không hẳn vậy. Phông chữ con không nên được đánh dấu đồng nhất là lỗi; chỉ cần giữ lại các định danh phông chữ và không trực tiếp đánh giá chúng là bị hỏng.

3. Nếu danh sách phông chữ trống, liệu có phải trang đang gặp vấn đề không?

Không hẳn vậy. Khi danh sách trống, trước tiên kiểm tra nội dung trang; trang đó có thể là hình ảnh hoặc một đường vẽ khác.

4. Liệu kết quả "an toàn" của một kịch bản có thể được sử dụng trực tiếp cho các quyết định dịch thuật không?

Không. Đầu ra mã chỉ là tín hiệu kỹ thuật và không thể xác định liệu các ký tự ngôn ngữ đích có sử dụng được hay không, cũng như không thể đánh giá liệu giấy phép có cho phép sửa đổi embedding hay không.

📝 Tóm tắt

Kiểm kê phông chữ là bước cơ bản trước khi dịch PDF; nó giúp bạn đánh giá khả năng chỉnh sửa và độ ổn định của tài liệu. Sau khi nhận tệp, trước tiên kiểm tra phông chữ, sau đó chọn đường dẫn, và sau khi dịch, vẫn kiểm tra sự tương ứng giữa tiêu đề, nội dung và chú thích.

Trải nghiệm ngay: Tải lên tài liệu của bạn để bắt đầu dịch, giữ nguyên định dạng gốc

Cập nhật lúc 2026-11-15