Получение странных результатов с PdfDocument на одном устройстве Android - PullRequest
0 голосов
/ 14 мая 2018

В приложении для Android я использую PdfDocument, чтобы сохранить отчет в файл PDF.На устройстве клиента я получаю странный результат с текстом отчета.

Ниже приведено изображение заголовка со следующим текстом, представленным в DroidSansMono:


Baus Demo Company
4727 4-й AVE SW STE 202
Сиэтл, WA 9816
Тел: 206-932-986
Факс: 206-932-986

Header

Этот же процесс хорошо воспроизводится на большинстве устройств.Я проверил файл PDF, и он имеет правильный шрифт.

вот полный файл PDF: Файл PDF

Может кто-нибудь помочь мне понять, почему текст отображается так?

1 Ответ

0 голосов
/ 15 мая 2018

Причина этого странного взгляда в том, что это именно то форматирование, которое описывает PDF.

Горизонтальное масштабирование

Поток контента страницы состоит из трех разделов:

Верхний раздел, весь текст над изображением подписи, содержит в начале инструкцию

2000 Tz

Внутри раздела после некоторого текста следует 1000 Tz, затем снова 2000 Tz и еще раз 1000 Tz.

Оператор Tz устанавливает горизонтальное масштабирование на предыдущее число в виде процентного значения. Таким образом, эти инструкции приводят к тому, что весь следующий текст (до конца раздела, где сбрасывается графическое состояние) растягивается по горизонтали с коэффициентом 10 или 20!

Это объясняет, почему глифы такие широкие, а не то, почему они так сильно перекрывают друг друга.

Ширина символов и расположение

Причина, по которой они так сильно перекрывают друг друга, заключается в том, что каждый глиф индивидуально располагается на расстоянии, подходящем для макета без горизонтального масштабирования.

Прежде всего, информация о шрифте DroidSansMono в PDF-файле объявляет, что практически все глифы в шрифте имеют ширину 0. Таким образом, при каждом прорисовке глифа точка вставки текста не блуждает до конца глифа, но остается в его начале.

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

Это вызывает все совпадения.


Если этот самый PDF-файл отображается «хорошо» (т. Е. Неправильно игнорирует операции Tz ) на большинстве устройств, средство рендеринга PDF, используемое на этих устройствах, явно выполняет паршивую работу при рендеринге PDF.

...