Прежде всего, Михаэль, конечно, прав, говоря:
К сожалению, если вы хотите понять, как работает синтаксис PDF, вам нужно прочитать спецификацию. Конечно, вы можете прочитать только ту часть, которая относится к тексту, Глава 9 и, возможно, 9.2. Но в этой главе, конечно, предполагается, что у вас есть знания о том, как PDF работает структурно и каковы типы объектов. Я предлагаю прочитать это.
Чтобы дать вам некоторые впечатления, вот несколько ответов на ваши вопросы ...
Разрывы строк
Как вставить разрывы строк? использование \ n \ r не помогло
Вы рисуете текст на разных строках, разбивая его на отдельные строки, по одной для каждой строки, и рисуя их отдельно, перемещаясь к следующей промежуточной строке, перемещая текущую позицию текста. Есть разные способы сделать это. Э.Г.
(Line 1 text) Tj
0 -20 Td
(Line 2 Text) Tj
Вес шрифта
Как изменить вес шрифта на жирный шрифт в середине строки
Выбрав жирный шрифт, например
/MyNormalFont 12 Tf
(Normal text - ) Tj
/MyBoldFont 12 Tf
(bold text) Tj
/MyNormalFont 12 Tf
( - normal text again) Tj
вы можете вывести «Обычный текст - полужирный текст - снова обычный текст».
(Существуют также смелые эффекты, такие как двойная печать букв с небольшим смещением ...)
Другие языки
Пробовал языки, отличные от английского, и не мог понять, как я могу сделать это на других языках, иврите, арабском, китайском и т. Д., Изменение шрифта не помогло, кодировка в UTF16 тоже не помогла, я должен кодировать что-то другое и установить кодировку где-нибудь?
Вы должны объявить шрифты, чтобы использовать их в потоках контента. В этих декларациях вы, в частности, определяете кодировку, используемую для текста, нарисованного с использованием соответствующего шрифта. Для приведенных выше примеров кодирование должно быть чем-то вроде ASCII, например. WinAnsiEncoding , но вы часто найдете другие кодировки, в частности для неанглийского текста.
Для этого вы должны рассмотреть Ресурсы типа Шрифт . Подробности см. глава спецификации 9.
См. Также пример в разделе «Нелатинский символ» ниже.
Ограничение ширины текста
Как ограничить текст определенной шириной
Рисуя достаточно мало символов.
См. Выше, прежде чем помещать инструкцию рисования строки в поток контента, вы должны разбить ее на строки. Просто выберите эти строки как можно короче.
Высота строки
Как установить свойства высоты строки
Вы имеете в виду расстояние от основания одной линии до основания следующей? Или вы имеете в виду высоту шрифта?
То, как выбрано прежнее расстояние, зависит от того, как вы переходите к следующей строке, см. Выше в разделе «Разрывы строк». Если вы сделаете так, как в примере с этим, вы перейдете к следующей строке на 20 единиц, используя
0 -20 Td
Вы устанавливаете последнюю высоту, высоту шрифта, в инструкции по выбору шрифта, например в «Вес шрифта» выше
/MyNormalFont 12 Tf
выбирает MyNormalFont размером 12 единиц.
Относительно этих единиц : Единица обычно начинается с 1/72 дюйма, но, изменив матрицу преобразования (см. Раздел 8 спецификации), вы можете изменить ее.
Несколько шрифтов
Смешивание нескольких шрифтов в одной строке
См. «Вес шрифтов» выше, различные веса шрифтов реализованы с использованием разных шрифтов.
Не латинский символ
Из комментария:
Не могли бы вы привести пример вставки символа, отличного от английского, кроме английского?
Один из вариантов, который у вас есть, - это создание шрифта PDF, который отображает нужные вам символы из заданной программы шрифтов по имени в диапазон 0..255 для однобайтовой кодировки. Это нормально для письменности на иврите или арабском языке, но в меньшей степени для письма CJK.
Поскольку вы запрашивали только один символ, я добавил в пример только один символ ... Более того, я использую Arial и ожидаю, что рассматриваемый PDF-просмотрщик будет найден в рассматриваемой системе, т.е. я не встраиваю его.
Таким образом, для шрифта с арабским символом alef maksura с именем alefmaksuraarabic в Adobe Glyph List помещается код 32 ( пробел в ASCII-производных кодировках) ), вы можете использовать:
1 0 obj
<<
/Type /Font
/Subtype /TrueType
/BaseFont /Arial
/Encoding
<<
/BaseEncoding /WinAnsiEncoding
/Differences [ 32 /alefmaksuraarabic ]
>>
/FirstChar 32
/LastChar 32
/FontDescriptor 2 0 R
/Widths [ 600 ]
>>
endobj
2 0 obj
<<
/Type /FontDescriptor
/FontName /Arial
/StemV 44
/Leading 33
/Ascent 905
/Flags 32
/XHeight 250
/FontWeight 400
/AvgWidth 441
/Descent -210
/CapHeight 728
/MaxWidth 2665
/FontBBox [-665 -210 2000 728]
/ItalicAngle 0
>>
endobj
Для стандартного Times-Roman / WinAnsiEncoding в качестве ресурса шрифта F и шрифта, определенного выше как ресурс шрифта G , Вы можете написать
BT
/F 12 Tf
15 815 Td
(Test: ) Tj
/G 12 Tf
( ) Tj
ET
в ваш контент-поток и получите