Несколько различных возможностей:
- Уровни масштабирования в вашем представлении PDF.Если ваш вид по умолчанию соответствует ширине, а размер страницы по умолчанию отличается, это может произойти довольно тонко.
- Кернинг.Интервал между двумя символами можно регулировать в зависимости от того, что это за символы.В «Ти» «я» часто гораздо ближе к «Т», чем могло бы быть в противном случае.Если один поддерживает это, а другой нет, ваш вывод будет иметь разную ширину.
- Лигатуры.Классическим примером является «fi», где точка i и выступ «f» являются одинаковыми пикселями.Если один поддерживает это, а другой нет, ваш вывод будет иметь разную ширину.
- Пути против шрифтов.Можно нарисовать заданную строку текста, используя текстовые операторы или операторы 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.Слепые люди с программами чтения с экрана должны это ненавидеть.