Как подогнать текст к позиции с помощью PDFBoxJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как подогнать текст к позиции с помощью PDFBox

Сообщение Anonymous »

Я использую PDFBox 3.0.0-RC1.
Я хочу вставить прозрачный текст, соответствующий фиксированному положению страницы PDF.
Вот мой исходный код:

Код: Выделить всё

// Insert image
PDImageXObject pdImage = JPEGFactory.createFromImage(document, image, 0.9f);
contentStream.drawImage(pdImage, 0, 0);

// set transparent text
PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
graphicsState.setNonStrokingAlphaConstant(0f);
contentStream.setGraphicsStateParameters(graphicsState);

// x1, x2, y1, y2 is position of text which I want to insert
// calculate font size base on field height and font family
float fontSizeByHeight = Math.abs(y2 - y1) * 1000 / font.getFontDescriptor().getCapHeight();

// calculate font size base on field width and font family
float fontSizeByWidth = Math.abs(x2 - x1) * 1000 / font.getStringWidth(field.getFieldResult();

float fontSize = Math.min(fontSizeByHeight, fontSizeByWidth);
contentStream.setFont(font, fontSize);
contentStream.beginText();
contentStream.newLineAtOffset(x1, y1);
contentStream.showText(field.getFieldResult());
contentStream.endText();

x1,x2,y1,y2 — положение текста на изображении. field.getFieldResult() — это текст в изображении (мы вставляем прозрачный текст в изображение, после чего пользователь может копировать/искать текст). Однако, когда ширина field.getFieldResult() равна < ширины позиции, взаимодействие с пользователем неудовлетворительное
Изображение

Поэтому мне нужно улучшить взаимодействие с пользователем при копировании. Однако я не могу использовать интервал между символами, потому что хочу, чтобы его можно было найти.
Я пытался добавить пробел в конце текста, если ширина текста < ширина позиции.
Однако , Chrome/Adobe Reader автоматически удаляет пробелы.

Код: Выделить всё

int avaliableWidth = Math.abs(x2 - x1);
float fieldResultWidthBaseOnFontSize = (fieldResultByFont / 1000.0f) * (1.0f * fontSize);
float spaceWidthBaseOnFontSize = (font.getStringWidth(" ")/ 1000.0f) * (1.0f * fontSize);
if (avaliableWidth > fieldResultWidthBaseOnFontSize) {
int numberOfSpaceInserted = (int) ((avaliableWidth - fieldResultWidthBaseOnFontSize) / spaceWidthBaseOnFontSize);
field.setFieldResult(StringUtils.rightPad(field.getFieldResult(), numberOfSpaceInserted));
}
Как это можно разместить?

Подробнее здесь: https://stackoverflow.com/questions/781 ... -by-pdfbox
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Подогнать текст к контейнеру с помощью переноса строк в CSS?
    Anonymous » » в форуме CSS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Подогнать текст к richTextBox
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Подогнать текст к richTextBox
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Binance API — получение текущей позиции и текущей стоимости позиции
    Anonymous » » в форуме Python
    0 Ответы
    186 Просмотры
    Последнее сообщение Anonymous
  • Как получить позиции x, y виджетов PyQt5, а также расстояние до верхней левой позиции главного экрана [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»