Font embedding trong PDF: tại sao lỗi font và cách fix triệt để
Embedded vs subset vs system font. Tại sao PDF bị lỗi font tiếng Việt và cách đảm bảo font hiển thị đúng.
PDF bị lỗi font — chuyện xảy ra hoài. Nhưng ít ai hiểu tại sao nó lỗi. Tại sao cùng 1 file, máy này đọc được máy kia thì ô vuông? Tại sao export PDF từ Word mà font vẫn bay?
Câu trả lời nằm ở 1 khái niệm: font embedding — nhúng font vào trong file PDF. Hiểu cái này, bạn sẽ không bao giờ bị lỗi font nữa (hoặc ít nhất biết fix ở đâu).
Font trong PDF hoạt động thế nào?
Khi Word hiển thị chữ "Xin chào": nó đọc font file trên máy bạn (VD: C:\Windows\Fonts\times.ttf), lấy hình dạng (glyph) của từng ký tự, render lên màn hình.
Khi PDF hiển thị chữ "Xin chào": nó cũng cần glyph tương tự. Nhưng PDF là file độc lập — người nhận có thể không có font đó trên máy. Nên PDF có 3 cách xử lý font:
Cách 1: Embedded (nhúng toàn bộ font)
Copy nguyên file font (.ttf/.otf) vào trong PDF. File PDF chứa luôn font → mở trên bất kỳ máy nào đều hiển thị đúng.
- Ưu: Chắc chắn đúng 100%, mọi ký tự đều có
- Nhược: Tăng dung lượng file. Font Times New Roman đầy đủ ~1.5 MB. File dùng 5 font = +7 MB
- Khi nào dùng: File quan trọng gửi ra bên ngoài, luận văn, hợp đồng
Cách 2: Embedded Subset (nhúng một phần)
Chỉ nhúng các ký tự thực sự dùng trong file. VD: file chỉ có 200 ký tự unique → nhúng 200 glyph thay vì toàn bộ 3000+ glyph của font.
- Ưu: Nhẹ hơn nhiều — font subset thường chỉ 50-200 KB thay vì 1.5 MB
- Nhược: Nếu tool tính thiếu ký tự → mất glyph (lỗi "mất vài dấu")
- Khi nào dùng: Đa số trường hợp — Word mặc định dùng cách này
Cách 3: Không embed (chỉ ghi tên font)
PDF chỉ ghi: "dùng font Times New Roman". Khi mở, máy tự tìm font đó trên system. Không có → thay font khác (substitution).
- Ưu: File rất nhẹ
- Nhược: Lỗi chắc chắn nếu máy người nhận không có font. Đặc biệt font tiếng Việt ít phổ biến
- Khi nào: Gần như không bao giờ nên dùng. Nhưng một số tool cũ default là không embed
Kiểm tra file PDF đang dùng cách nào
Adobe Reader → File → Properties → tab Fonts:
TimesNewRomanPSMT (Embedded Subset) ← OK, subset
ArialMT (Embedded) ← OK, full embed
Roboto-Regular ← KHÔNG embed → sẽ lỗi trên máy khác
Nếu font không có chữ "Embedded" → file sẽ lỗi trên máy không cài font đó.
Tại sao lỗi hay xảy ra với tiếng Việt?
Font Latin cơ bản (A-Z, 0-9) chỉ cần ~100 glyph. Font tiếng Việt cần thêm ~130 ký tự có dấu (ắ, ẵ, ặ, ể, ỡ...). Khi subset thiếu — thường thiếu đúng mấy ký tự hiếm này.
Ví dụ thực tế: font có "a" + "ă" nhưng thiếu "ẵ" (a + breve + tilde). Kết quả: 99% chữ hiện đúng, nhưng từ "lẵng" → "lăng". Khó phát hiện vì gần đúng.
Mấy case hay gặp:
- Export từ Canva: Canva subset rất aggressive — font decorative thường thiếu glyph VN
- Print to PDF từ Chrome: Chrome subset dựa trên Unicode range, đôi khi miss ký tự tổ hợp
- Font design (Montserrat, Poppins phiên bản cũ): Trước 2020, nhiều Google Font chưa có đầy đủ Vietnamese glyphs
Cách export PDF không bao giờ lỗi font
Từ Microsoft Word (Windows)
Cách 1 — Save As PDF (khuyến nghị):
- File → Save As → PDF
- Options → tick "Embed fonts in the document"
- Nếu tick thêm "Embed only the characters used" → subset (nhẹ hơn, thường OK)
- Nếu bỏ tick → embed full (nặng hơn, chắc chắn 100%)
Cách 2 — Print to PDF (backup):
- File → Print → Microsoft Print to PDF
- Save
Cách này auto embed full font — không cần setting gì. Nhược: mất bookmark và hyperlink.
Từ LibreOffice
File → Export as PDF → tick "Embed fonts" (mặc định đã tick). LibreOffice embed khá tốt.
Từ Google Docs
File → Download → PDF. Google Docs tự embed font. Nhưng: nếu dùng font lạ (upload custom font) → có thể lỗi. Dùng Google Font phổ biến thì OK.
Từ Figma/Canva
Export PDF → check kỹ tiếng Việt sau export. Mấy tool design hay subset aggressive. Nếu lỗi → đổi sang font có hỗ trợ VN đầy đủ (Roboto, Be Vietnam Pro, Noto Sans).
Font nào "an toàn" cho tiếng Việt?
Mình đã test, mấy font này chưa bao giờ lỗi:
| Font | Kiểu | Ghi chú |
|---|---|---|
| Times New Roman | Serif | Default Word, có sẵn mọi máy |
| Arial | Sans-serif | Có sẵn mọi máy |
| Roboto | Sans-serif | Google Font, support VN đầy đủ từ 2019 |
| Be Vietnam Pro | Sans-serif | Thiết kế riêng cho tiếng Việt, hoàn hảo |
| Noto Sans Vietnamese | Sans-serif | Google Font, mục tiêu cover mọi ngôn ngữ |
| Source Han Sans | Sans-serif | Adobe, hỗ trợ CJK + Vietnamese |
Font nên tránh (dễ lỗi):
- Font .VnTime, VNI-Times → encoding cũ, không Unicode
- Font handwriting/script → thường thiếu glyph VN
- Font từ DaFont, 1001fonts → chất lượng không đảm bảo
- Montserrat, Playfair Display (phiên bản trước 2020) → thiếu một số tổ hợp dấu
File đã bị lỗi — fix thế nào?
- Có file nguồn (Word/InDesign): Mở lại → đổi font → export PDF mới. Nhanh nhất.
- Không có file nguồn, máy bạn mở đúng: Mở PDF → Print → Microsoft Print to PDF → file mới embed font đúng.
- Không máy nào mở đúng: File dùng font encoding cũ (VNI/TCVN3). Dùng OCR — Tesseract nhận dạng từ ảnh render, bỏ qua encoding → ra Unicode chuẩn.
Tóm lại
Quy tắc đơn giản:
- Luôn embed font khi export PDF (tick option trong Word/LibreOffice)
- Dùng font Unicode phổ biến (Times New Roman, Arial, Roboto, Be Vietnam Pro)
- Sau export: mở PDF → Properties → Fonts → check tất cả có "Embedded"
- Test nhanh: Select All → Copy → Paste Notepad → đọc lại text
Làm 4 bước này thành thói quen → không bao giờ gửi file lỗi font cho người khác nữa.
Dùng ngay: Chuyển Word sang PDF — Giữ nguyên font, bảng, hình ảnh
Chuyển file Word sang PDF online miễn phí. Giữ nguyên font chữ, bảng biểu, hình ảnh. Hỗ trợ .docx và .doc. Không cần cài Office hay phần mềm — nhanh và bảo mật.
Mở công cụ →