Элементы управления PDF отображают текст по-разному

#vb.net #pdf

#vb.net #PDF

Вопрос:

Я работаю над веб-сайтом, который создает PDF-файлы динамически.

Я поиграл с двумя разными элементами управления pdf — wpcubed и abcpdf — и был удивлен, увидев, что они оба отображают текст по-разному.

wpCubed:

введите описание изображения здесь

abcpdf:

введите описание изображения здесь

Они оба используют arial 25pt bold, поэтому я ожидал, что они будут выглядеть одинаково. Кто-нибудь может объяснить, почему они этого не делают.

Вот полные файлы: wpCubed, abcpdf

Комментарии:

1. Возможно, они использовали разные уровни масштабирования / dpi при отображении текста.

2. Уровень масштабирования в программе просмотра pdf определенно тот же. Я убедился, что проверил это.

3. Уровень масштабирования на самом деле зависит от эталонного dpi, используемого для 100%-ного масштабирования. Например, Adobe Reader может использовать 110 точек на дюйм (или другие пользовательские значения, которые можно задать в настройках) в качестве эталона для 100%-ного увеличения, поэтому 100%-ное увеличение в Adobe Reader не будет таким же, как 100%-ное увеличение в Foxit. Если вы можете опубликовать файл где-нибудь, я могу взглянуть на него. Наша компания также разрабатывает программу просмотра PDF, PDFView4NET ( o2sol.com/pdfview4net/overview.htm ), мы приглашаем вас взглянуть на это.

4. Хорошо, спасибо. Файлы теперь там.

5. в wpcubed.pdf используется шрифт Arial Bold, размер 22,5 пункта, а также настраивается интервал между словами. в abcpdf.pdf используется шрифт Arial, размер 25, интервал между словами не регулируется, и он рисует один и тот же текст 4 раза, каждый раз сдвигая позицию X на 0,25 пункта (понятия не имею, почему). Я рекомендую также взглянуть на наш генератор PDF PDF4NET: www.o2sol.com/pdf4net/overview.htm

Ответ №1:

Несколько различных возможностей:

  1. Уровни масштабирования в вашем представлении PDF. Если ваш вид по умолчанию — fit width, а размер страницы по умолчанию отличается, это может произойти довольно незаметно.
  2. Кернинг. Интервал между двумя символами можно регулировать в зависимости от того, что это за символы. В «Ti» буква «i» часто намного ближе к «T», чем могла бы быть в противном случае. Если один поддерживает это, а другой нет, ваш вывод будет иметь разную ширину.
  3. Лигатуры. Классическим примером является «fi», где точка i и выступ «f» — это одни и те же пиксели. Если один поддерживает это, а другой нет, ваш вывод будет иметь разную ширину.
  4. Пути против шрифтов. Можно нарисовать заданную строку текста, используя текстовые операторы или операторы преобразования строки в кривую. Последний вариант крайне неэффективен, но иногда это единственный способ правильно отобразить заданный фрагмент текста. Текст с путями может страдать из-за отсутствия «намеков» на шрифт… различные приемы, используемые для выравнивания текста по пикселям.

Без доступа к вашим выводам PDF невозможно быть уверенным.

С учетом сказанного, пропорции некоторых из этих символов выглядят по-разному. Сравните букву «e» в «test» из двух строк. Буква «e» из abcpdf выглядит «шире», чем буква из wbCubed. Это не кернинг, лигатуры или уровни масштабирования. Возможно, это даже не пути к шрифтам.

Итак, можем ли мы просмотреть ваши PDF-файлы?


Вот поток содержимого из wpcubed

 
 BT 1 0 0 1 0 0 Tm 
 /F1 22.500 Tf 0 Ts 0 g -2.667 Tw 452 -18 Td (это тест)Tj 
 ET

А вот поток содержимого из abcpdf:

 BT 
 0 0 0 rg
 /Fabc5 25 Tf 
 1 0 0 1 444.825 822 Tm
 (Это тест) Tj 
 0.25 0 Td
 (Это тест) Tj 
 0.25 0 Td
 (Это тест) Tj 
 0.25 0 Td
 (Это тест) Tj 
 ET

Хех: «Бедняга выделен жирным шрифтом». Позвольте мне проверить ресурсы шрифта… Да.

wpcubed использует «Arial, жирный шрифт». abcpdf использует «ArialMT» и печатает одни и те же слова с небольшим смещением несколько раз.

Вероятно, вы можете убедить abcpdf использовать «Arial, bold», и в этом случае я бы ожидал, что два выходных данных будут выглядеть идентично. Я раньше не смотрел abcpdf, но, вероятно, это возможно.

Я только что проверил их документы, и, похоже, XFont.findFamily("Arial") это правильный путь. Вы бы проверили возвращаемый массив XFonts на предмет того, что «действительно» выделено полужирным шрифтом Arial, а не какой-либо искусственной техникой выделения жирным шрифтом в обычном Arial. Вероятно, вы также захотите посмотреть на XFont.names , а не XFont.name на.

Этот конкретный трюк с «выделением жирным шрифтом» имеет серьезный недостаток: функция Copy-n-paste выделит все 4 экземпляра текста. Более удобным методом выделения является определение толщины линии на основе некоторой небольшой доли размера точки шрифта (в iText используется 1/30), а также обводка и заливка шрифта. Шрифты обычно просто заполняются, поэтому толщина этой линии добавляется к внешней стороне шрифта, без лишних слов, которые могут сбить с толку кого-либо, кто выбирает / читает текст на экране.

Ага. Слепые люди с программами чтения с экрана, должно быть, ненавидят это.

Комментарии:

1. Спасибо. Уровни масштабирования определенно одинаковы — я проверил это. Я рассмотрю другие возможности.

2. Я добавил ссылки на PDF-файлы.

3. Спасибо. Теперь я перешел с использования «Arial» с выделением жирным шрифтом на «Arial Bold». И это работает. (Также это делает мои белые цвета вдвойне чистыми!)