Создать класс TextRenderInfoObject с полями как
private String text;
private TextRenderInfo line;
, добавить все конструкторы, геттеры и сеттеры.
Чтобы получить координаты текста (заполнитель)
PdfReader reader = new PdfReader(byteArrayOutputStream.toByteArray());
List<TextRenderInfoObject> textRenderInfos = new ArrayList<>();
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
parser.processContent(pageNumber, new TextMarginFinder()
{
@Override
public void renderText(TextRenderInfo renderInfo)
{
if("dstext".contains(renderInfo.getText()))
{
textRenderInfos.add(new TextRenderInfoObject(
renderInfo.getText(), renderInfo));
}
}
}
Rectangle2D.Float line;
for (TextRenderInfoObject textRenderInfo : textRenderInfos)
{
if (textRenderInfo.getText().equals("dstext"))
line = textRenderInfo.getLine().getBaseline().getBoundingRectange());
}
Создание поля формы в pdf
PdfReader pdfReader = new PdfReader(byteArrayOutputStream.toByteArray());
PdfStamper stamper = new PdfStamper(pdfReader, byteArrayOutputStream);
PdfFormField field = PdfFormField.createSignature(stamper.getWriter());
field.setFieldName("Digital Signature");
field.setWidget(new Rectangle(line.x, line.y, line.x + line.width, line.y - line.height), PdfAnnotation.HIGHLIGHT_OUTLINE);
field.setFlags(PdfAnnotation.FLAGS_PRINT);
field.setColor(BaseColor.WHITE);
field.setMKBorderColor(BaseColor.BLACK);
stamper.addAnnotation(field, pageNumber);
stamper.close();