Я хочу вставить прозрачный текст, соответствующий фиксированному положению страницы 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();

Поэтому мне нужно улучшить взаимодействие с пользователем при копировании. Однако я не могу использовать интервал между символами, потому что хочу, чтобы его можно было найти.
Я пытался добавить пробел в конце текста, если ширина текста < ширина позиции.
Однако , 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