Синтаксис PDF BT ET текстовые операции - PullRequest
0 голосов
/ 30 апреля 2018

Глядя на поток синтаксиса PDF BT ET У меня есть несколько вопросов, которые я не мог понять из руководства по эксплуатации PDF32000:

Хорошая ссылка на онлайн-ресурс также была бы отличной ...

BT /F1 24 Tf ... (My String is here)Tj ET

Глядя на этот кусок кода,

  • Как вставить разрывы строк? использование \n\r не помогло
  • Как я могу изменить вес шрифта выделять жирным шрифтом в середине строки
  • Пробовал языки, отличные от английского, и не мог понять, как я могу сделать это на других языках, иврите, арабском, китайском и т. Д., Изменение шрифта не помогло, кодировка в UTF16 тоже не помогла, я должен кодировать что-то другое и установить кодировку где-нибудь?
  • Как ограничить текст определенной шириной
  • Как установить свойства высоты строки
  • Смешивание нескольких шрифтов в одной строке

Я знаю, что могу использовать PDFKit, PDFJS и т. Д. ... но мне бы очень хотелось узнать , как работает синтаксис PDF , интерактивное руководство по PDF32000 действительно длинное и сложное ...

1 Ответ

0 голосов
/ 30 апреля 2018

Прежде всего, Михаэль, конечно, прав, говоря:

К сожалению, если вы хотите понять, как работает синтаксис 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

в ваш контент-поток и получите

screen shot

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