PDFBox конвертирует дюймы или сантиметры в систему координат

Я новичок в PDFBox (и создании PDF), и мне сложно создать собственный PDF файл.

У меня есть текст с определенными координатами в дюймах/сантиметрах, и мне нужно преобразовать их в единицы, которые использует PDFBox. Любые предложения/утилиты, чем это можно сделать автоматически?

PDPageContentStream.moveTextPositionByAmount(x,y) не имеет для меня никакого смысла.

Ответы

Ответ 1

В целом PDFBox использует координаты пространства пользователя PDF при создании PDF. Это означает:

  • Координаты страницы разделяются символом CropBox по умолчанию на MediaBox, значения увеличиваются слева направо и снизу вверх. Таким образом, если вы создаете страницу с помощью new PDPage() или new PDPage(PDPage.PAGE_SIZE_*), начало координат начинается в левом нижнем углу страницы.

  • Единица в пространстве пользователя начинается как единица пространства пользователя по умолчанию, которая определяется UserUnit страницы. Чаще всего (например, если вы создаете страницу с помощью любого из конструкторов PDPage и не меняете явное значение этого значения), она явно не задана и, следовательно, ее удары по умолчанию равны 1/72 дюйма.

  • Система координат пользовательского пространства может быть изменена довольно произвольно путем конкатенации некоторая матрица к текущей матрице преобразования. Текущая матрица преобразования начинается как единичная матрица.

    В PDFBox вы делаете это, используя одну из перегрузок PDPageContentStream.concatenate2CTM().

  • Как только вы переключаетесь в текстовый режим с помощью PDPageContentStream.beginText(), на используемую систему координат также влияет преобразование, введенное текстовой матрицей.

    В PDFBox вы устанавливаете текстовую матрицу, используя одну из перегрузок PDPageContentStream.setTextMatrix().

Поскольку вы новичок в PDFBox (как вы говорите) и новичок в PDF в целом (как я полагаю, потому что иначе вы бы узнали координаты), я бы посоветовал вам сначала воздерживаться от использования преобразований, где это возможно, и, следовательно, остаются в состоянии, когда система координат начинается в левом нижнем углу, ни поворачивается, ни перекошена и имеет единицу длины 1/72 дюйма.

В этом контексте вы можете использовать константы, предоставленные PDFBox для преобразования:

  • Умножить координаты в дюймах на PDPage.DEFAULT_USER_SPACE_UNIT_DPI, чтобы получить координаты пространства пользователя по умолчанию.
  • Умножить координаты в мм на PDPage.MM_TO_UNITS, чтобы получить координаты пространства пользователя по умолчанию.

Если вы хотите повеселиться с координатами, посмотрите на спецификацию PDF ISO-32000-1 и изучите разделы 8.3 Системы координат и 9.4.4 Детали текстового пространства.