Pdf.js: Плохо отображается Times New Roman PS

Созданный на 22 мар. 2019  ·  3Комментарии  ·  Источник: mozilla/pdf.js

Прикрепите (рекомендуется) или ссылку на файл PDF здесь:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf

Конфигурация:

  • Веб-браузер и его версия: Chrome 73
  • Операционная система и ее версия: * Macos 10.14.1 *
  • Версия PDF.js: 2.2.91
  • Расширение для браузера: Нет

Шаги по воспроизведению проблемы:


  1. Откройте PDF-файл (это одна страница, извлеченная из книги) и посмотрите плохо отрисованные шрифты.

image

Какое ожидаемое поведение? (добавить скриншот)
На любом другом PDF-ридере он отлично отображает:
image

Ссылка на программу просмотра (если она размещена на сайте, отличном от mozilla.github.io/pdf.js или как расширение Firefox / Chrome):
Текущий просмотрщик страниц github: https://mozilla.github.io/pdf.js/web/viewer.html

Примечания:
Нам удалось заставить его работать, отредактировав шрифты в PDF. В настоящее время это «Times New Roman PS», повторная визуализация с использованием только «Times New Roman», кажется, исправляет.

Ошибок консоли или каких-либо других видимых признаков решения, таких как отсутствие CMaps, нет.

К сожалению, нам не разрешено изменять PDF-файлы, поэтому повторная визуализация каждого из них не является жизнеспособным решением.

Если кто-нибудь может дать какое-либо представление об этом и о возможном решении, это будет очень признательно 🤠

4-font-conversion

Самый полезный комментарий

PDF определяет одни и те же шрифты много раз. Например, шрифт LULQLP+TimesLTStd-Roman определяется девять раз. Каждый из них относится к одному и тому же FontDescriptor и одному и тому же встроенному потоку данных CFF.

Вычисление хэша шрифта выполняется в PartialEvaluator.prototype.preEvaluateFont() в core / evalator.js. Он добавляет в хэш записи «Кодировка», «ToUnicode» и «Ширина». Некоторые шрифты в PDF получают идентичные хэш-коды, потому что все упомянутые записи идентичны, даже ширина. Различаются только записи FirstChar и LastChar. Если шрифты получают одинаковые хэш-коды, может ли это привести к тому, что шрифт будет пропущен, чтобы он не был преобразован в OpenType?

Вот уменьшенный PDF-файл, содержащий два шрифта из исходного PDF-файла.
issue10665_reduced.pdf

Все 3 Комментарий

PDF определяет одни и те же шрифты много раз. Например, шрифт LULQLP+TimesLTStd-Roman определяется девять раз. Каждый из них относится к одному и тому же FontDescriptor и одному и тому же встроенному потоку данных CFF.

Вычисление хэша шрифта выполняется в PartialEvaluator.prototype.preEvaluateFont() в core / evalator.js. Он добавляет в хэш записи «Кодировка», «ToUnicode» и «Ширина». Некоторые шрифты в PDF получают идентичные хэш-коды, потому что все упомянутые записи идентичны, даже ширина. Различаются только записи FirstChar и LastChar. Если шрифты получают одинаковые хэш-коды, может ли это привести к тому, что шрифт будет пропущен, чтобы он не был преобразован в OpenType?

Вот уменьшенный PDF-файл, содержащий два шрифта из исходного PDF-файла.
issue10665_reduced.pdf

Вычисление хэша шрифта выполняется в PartialEvaluator.prototype.preEvaluateFont() в core / evalator.js. Он добавляет в хэш записи «Кодировка», «ToUnicode» и «Ширина». Некоторые шрифты в PDF получают идентичные хэш-коды, потому что все упомянутые записи идентичны, даже ширина. Различаются только записи FirstChar и LastChar.

Действительно отличный анализ, спасибо; это упростило исправление ошибки!

Если шрифты получают одинаковые хэш-коды, может ли это привести к тому, что шрифт будет пропущен, чтобы он не был преобразован в OpenType?

В некоторых плохо сгенерированных файлах PDF может быть огромное количество идентичных шрифтов, и цель preEvaluateFont заключалась в том, чтобы просто избежать необходимости загружать / анализировать повторяющиеся шрифты. Следовательно, loadFont будет сравнивать hash es и, если возможно, использовать уже загруженный / проанализированный шрифт.
Очевидно, все это зависит от того факта, что hash es на самом деле правильные / уникальные, но, к счастью, за эти годы в этом коде было относительно мало ошибок.

Это здорово, большое спасибо за помощь!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги