Прежде чем передать задачу по переводу PDF, сначала проверьте шрифт, а не спешите его менять.
Длина списка шрифтов по умолчанию отличается от длины кортежа, возвращаемого функцией full=True. Затем прочитайте первые шесть элементов, а затем проверьте, являются ли байты шрифта, возвращаемые экстрактом_font, пустыми. Ссылка на шрифт Base14 не означает, что шрифт встроен в программу; и подмножество шрифтов не должно считаться ошибкой.
Основные положения этой статьи
— Длина списка шрифтов по умолчанию отличается от длины кортежа, возвращаемого функцией full=True, и при чтении следует использовать первые шесть элементов.
- Перед переводом необходимо провести инвентаризацию шрифтов. Нецелесообразно напрямую заменять их на Siyuan Heibo или Arial по всему миру.
- Ссылка на шрифт 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
Этот тест имеет четкие границы: «поврежденный» или «невстроенный» объект синтетического шрифта не может быть создан в памяти без использования внешнего файла шрифта. Таким образом, этот тест фокусируется на двух вещах: проверке точности синтаксического анализа обычных встроенных шрифтов и защитной обработке функцией недопустимых номеров страниц. Ветки исключений необходимо тестировать индивидуально. Демонстрационный код работает в изолированной среде, но это не является гарантией работоспособности всех реальных файлов или продукта.
Критерии приемки и границы ручной проверки
«Безопасный» или «предупреждающий» вывод кода является лишь техническим сигналом и не может быть напрямую приравнен к возможности перевода. Сценарий может точно сообщить о статусе внедрения, но он не может определить, имеет ли шрифт соответствующий глиф на целевом языке, а также не может оценить, разрешает ли лицензия изменение встраивания. Эти решения должны приниматься людьми в контексте проекта.
Конкретные решения по обработке исключений
| наблюдать | что делать | не следует предполагать |
|---|---|---|
| Программа шрифтов пуста | Записи не загружены для внедрения | Ссылки на базу 14 — это не то же самое, что вложения |
| Шрифт Цзыцзи | Сохранять маркировку шрифта | Ущерб не оценивается напрямую |
| Список пуст | Проверьте содержание страницы | Это может быть изображение или другой маршрут рисования |
Перед тем как браться за важные документы, пожалуйста, сохраняйте оригиналы и проверяйте их в соответствии с вышеуказанными границами и пунктами принятия.
🎯 Какой способ тебе подходит?
Если вы просто получили PDF для перевода
Сначала оцените шрифты, а потом решите, какой путь выбрать; не спешите их заменять.
Если результат обнаружения показывает, что программа шрифта пуста
Запишите это и подтвердите содержимое страницы; не предполагайте, что вложение завершено.
Если в документе есть подмножество шрифтов
Оставьте шрифтовые маркировки и воспринимайте их как обычные, а не напрямую оценивайте как ошибки.
Если требуется проверка с реальными документами
Используйте образец десенсибилизации, который вы загружены с вашего разрешения, и проверьте результаты с пунктами чек-листа в этой статье.
❓ Часто задаваемые вопросы (FAQ)
1. Означает ли ссылка на шрифт Base14, что шрифт уже встроен?
Нет. Ссылки на шрифты Base14 не означают, что программа для шрифтов встроена; нужно проверить, пусты ли байты шрифта, возвращаемые extract_font.
2. Действительно ли проблема с шрифтом подмножества?
Не обязательно. Шрифты подмножеств не должны быть единородно отмечены как ошибки; просто сохраняйте идентификаторы шрифтов и не оценивайте их напрямую как поврежденные.
3. Если список шрифтов пуст, значит ли это, что проблема со страницей?
Не обязательно. Когда список пуст, сначала проверьте содержимое страницы; страница может быть изображением или другим маршрутом для рисования.
4. Можно ли напрямую использовать «безопасный» результат сценария для принятия решений о переводе?
Нет. Вывод кода является лишь техническим сигналом и не может определить, пригодны ли глифы целевых языков, а также не может оценить, разрешает ли лицензия изменять эмбеддинги.
📝 Краткое содержание
Инвентаризация шрифтов — это фундаментальный этап перед переводом PDF; она помогает оценить редактируемость и стабильность рендеринга документа. После получения файла сначала проверьте шрифт, затем выберите путь, а после перевода проверьте соответствие между заголовками, основным текстом и подписями.
Опыт сейчас: загрузите документ, чтобы начать перевод, сохраняя оригинальное форматирование


