Перш ніж передавати завдання з перекладу PDF-файлу, спочатку перевірте шрифт, а не поспішайте змінювати шрифт.
Довжина списку шрифтів за замовчуванням відрізняється від довжини кортежу, який повертає full=True. Далі прочитайте перші шість елементів, а потім перевірте, чи байти шрифту, які повертає extract_font, порожні. Посилання на шрифт Base14 не означає, що шрифт вбудовано в програму; підмножини шрифтів також не слід вважати помилкою.
Коли багато людей отримують PDF-файл для перекладу, перше, про що вони думають, це змінити його безпосередньо на Siyuan Heibo або Arial. Це часто спричиняє проблеми під час доставки: математичні символи стають квадратами, номери таблиць зміщуються або переклад не відкривається в певних програмах для читання. Ця стаття написана для розробників і власників документів, яким потрібно взяти на себе завдання перекладу PDF. Після прочитання ви дізнаєтесь, як використовувати PyMuPDF для інвентаризації шрифтів, як інтерпретувати отримані результати та які висновки не можна зробити на основі лише виведеного коду.
Метою інвентаризації шрифтів є підтвердження технічної можливості редагування та стабільності відтворення, а не проведення аудиту відповідності законодавству. Стандартний список шрифтів відрізняється від довжини кортежу, яку повертає full=True. Під час читання потрібно взяти перші шість елементів, а потім перевірити, чи байти шрифту, які повертає extract_font, порожні. Посилання на шрифт Base14 не означають, що шрифт є вбудованим у програму, а піднабір шрифтів не завжди слід розглядати як помилку.
Висновок одним реченням
Спочатку інвентаризуйте шрифти, а потім визначте шлях перекладу. Не змінюйте шрифти глобально перед вилученням тексту.
| ваша ситуація | Рекомендовані практики | причина |
|---|---|---|
| Програма шрифтів порожня | Записи не витягуються до пристрою для вбудовування та підтверджують ситуацію на сторінці | Посилання на Base14 не означає вбудований шрифт |
| зустрічаються підмножини шрифтів | Зберігайте ідентичність шрифту | Піднабір шрифтів не означає пошкодження |
| Список шрифтів порожній | Підтвердьте вміст сторінки | Сторінка може бути зображенням або іншим намальованим контуром |
| Потрібно обробляти справжні файли | Спочатку перевірте з десенсибілізованими зразками | Зразок коду не відображає вплив на всі реальні файли |
Чому ми не можемо безпосередньо замінити шрифти глобально?
Пряма заміна шрифтів стикається з кількома типовими проблемами:
- Математичні символи в оригінальному тексті стають квадратами.
- Вирівнювання чисел у таблиці однаково по ширині недійсне.
— Вбудовано обмежені шрифти, через що переклад не відкривається в деяких програмах для читання.
Тому перед початком вилучення тексту чи реконструкції набору проведіть інвентаризацію шрифтів документа. `get_page_fonts()` — це базовий тест, наданий PyMuPDF, який може сказати вам, на які ресурси шрифтів насправді посилається кожна сторінка, чи повністю вони вбудовані та тип кодування. Ця інформація визначає, чи слід у майбутньому використовувати оптичне розпізнавання символів, пряму заміну чи ручне перевпорядкування.
Ключові моменти читання інформації про шрифт
- Список шрифтів за замовчуванням має іншу довжину, ніж кортеж, повернутий
full=True, який читається як перші шість елементів. - Коли програма шрифтів порожня, це означає, що байти вбудованих шрифтів не витягуються.
- Піднабір шрифтів повинен зберігати лише ідентифікатор шрифту, а не вважати це помилкою.
Синтетичне тестування: побудова пам'яті та перевірка тверджень
Щоб дозволити прикладу працювати ізольовано, ми створили повністю автономний тестовий приклад. Замість того, щоб покладатися на зовнішні файли, сценарій використовує PyMuPDF для створення PDF-файлу, що містить стандартні шрифти в пам’яті, а потім негайно виконує його інвентаризацію. Це не тільки забезпечує відтворюваність, але й уникає ризиків щодо авторських прав і конфіденційності.
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
Цей тест має чіткі межі: «пошкоджений» або «невбудований» об’єкт синтетичного шрифту неможливо створити в пам’яті без залучення зовнішнього файлу шрифту. Таким чином, цей тест зосереджений на двох речах: перевірці точності розбору звичайних вбудованих шрифтів і захисній обробці функції недійсних номерів сторінок. Виняткові гілки потрібно тестувати індивідуально. Демо-код працює в ізольованому середовищі, але це не є гарантією всіх реальних файлів або продуктивності продукту.
Критерії прийняття та межі перевірки вручну
«Безпечний» або «попереджувальний» вихід із коду є лише технічними сигналами, і їх не можна прямо прирівняти до можливості перекладу. Сценарій може точно повідомляти про стан вбудовування, але він не може визначити, чи шрифт має відповідний гліф цільовою мовою, а також не може оцінити, чи дозволяє ліцензія змінювати вбудовування. Ці рішення повинні прийматися людьми в контексті проекту.
Конкретні рішення щодо обробки винятків
| спостерігати | що робити | не слід робити висновок |
|---|---|---|
| Програма шрифтів порожня | Записи не отримано до вбудовувача | Цитування Base14 не означає вбудовування |
| шрифт підмножини | Зберігайте ідентичність шрифту | Немає прямого визначення пошкоджень |
| Список порожній | Перевірте вміст сторінки | Це може бути зображення або інший шлях малювання |
Перед тим, як братися за важливі документи, зберігайте оригінали та переглядайте їх відповідно до вищезазначених меж і пунктів прийняття.
🎯 Який метод тобі підходить?
Якщо ви щойно отримали PDF для перекладу
Спочатку оцініть шрифти, а потім виріште, який шлях обрати; не поспішайте їх замінювати.
Якщо результат виявлення показує, що програма шрифту порожня
Запишіть це і підтвердіть зміст сторінки; не вважайте, що вбудовування завершене.
Якщо документ містить підмножини шрифтів
Зберігайте маркування шрифтів і сприймайте їх як звичайні, а не просто оцінюйте як помилки.
Якщо потрібна перевірка з реальними документами
Використайте зразок десенсибілізації, який ви завантажили з вашого дозволу, і перевірте результати за пунктами чек-листа в цій статті.
❓ Поширені запитання (FAQ)
1. Чи означає посилання на шрифт Base14, що шрифт уже вбудований?
Ні. Посилання на шрифти Base14 не означають, що програма шрифту вбудована; потрібно перевірити, чи байти, які повертає extract_font, пусті.
2. Чи точно є проблема з шрифтом підмножин?
Не обов'язково. Підмножини шрифтів не слід одномірно позначати як помилки; просто зберігайте ідентифікатори шрифтів і не оцінюйте їх безпосередньо як пошкоджені.
3. Якщо список шрифтів порожній, чи означає це, що проблема зі сторінкою?
Не обов'язково. Коли список порожній, спочатку перевірте вміст сторінки; сторінка може бути зображенням або іншим шляхом малюнка.
4. Чи можна безпосередньо використовувати «безпечний» результат сценарію для прийняття рішень щодо перекладу?
Ні. Вихідний код є лише технічним сигналом і не може визначити, чи придатні гліфи цільової мови, а також не може оцінити, чи дозволяє ліцензія змінювати вкладення.
📝 Резюме
Інвентаризація шрифтів — це фундаментальний етап перед перекладом у PDF; вона допомагає оцінити редагованість документа та стабільність рендерингу. Після отримання файлу спочатку перевірте шрифт, потім виберіть шлях, а після перекладу все одно перевіряйте відповідність між заголовками, основним текстом і підписами.
Досвід зараз: завантажте документ, щоб почати переклад, зберігаючи оригінальне форматування


