Элементы управления PDF отображают текст по-разному - PullRequest
1 голос
/ 05 апреля 2011

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

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

wpCubed:

enter image description here

ABCpdf:

enter image description here

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

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

1 Ответ

3 голосов
/ 05 апреля 2011

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

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

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

Сказав это, соотношение сторон некоторых из этих символов выглядит иначе .Сравните «е» в «тесте» из двух строк.«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(This is a test)Tj
    ET

А вот контентпоток из abcpdf:

    BT
    0 0 0 rg
    /Fabc5 25 Tf
    1 0 0 1 444.825 822 Tm
    (This is a test) Tj
    0.25 0 Td
    (This is a test) Tj
    0.25 0 Td
    (This is a test) Tj
    0.25 0 Td
    (This is a test) Tj
    ET

Хех: "Бедный мужик".Позвольте мне проверить ресурсы шрифта ... Да.

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...