PdfReader reader = new PdfReader("template.pdf");
PdfStamper stamper = new PdfStamper( reader, new FileOutputStream("output.pdf"));
PdfContentByte content = stamper.getOverContent(1); // first page == 1
Image image = Image.createInstance("someImage.png");
image.setAbsolutePosition( x, y );
image.setAbsoluteHeight( hei );
image.setAbsoluteWidth( wid );
content.addImage(image);
// instead of absolutely positioning the image, you can do:
//content.addImage( image, wid, 0f, 0f, hei, x, y );
// that's a transformation matrix, you can skew, rotate, scale, etc.
stamper.close();
Если вы не знаете точное местоположение, у вас есть несколько вариантов.
1) Замените существующее изображение.
С помощью этой опции вы можете получить шаблон, немного нависающий над изображением, использовать альфа-смешение и так далее.Получить фантазии.Вы можете сделать то же самое с приведенным выше кодом, если вы использовали stamper.getUnderContent(1)
и создали свой шаблон с прозрачным фоном.Я только что ответил на вопрос о замене изображения , который должен помочь в этом вопросе.
Новое изображение унаследует все графическое состояние изображения заполнителя.x, y, wid, hei, необязательные группы содержимого, прозрачность, всевозможные вещи.
2) Добавьте аннотацию (поля легко доступны) к шаблону в Acrobat (или, я полагаю, с iText) ииспользуйте RECT для указания x, y, wid, hei для приведенного выше кода.
// given the above stamper
AcroFields fields = stamper.getAcroFields();
PdfDictionary replaceAnnot = fields.getFieldItem("ReplaceMe").getMerged(0);
//we can remove the field from the PDF without breaking the info in replaceAnnot.
fields.removeField("ReplaceMe");
// rects are laid out [llx, lly, urx, ury]
PdfArray rect = replaceAnnot.getAsArray(PdfName.RECT);
float x = rect.getAsNumber(0).floatValue();
float y = rect.getAsNumber(1).floatValue();
float width = rect.getAsNumber(2).floatValue() - x;
float height = rect.getAsNumber(3).floatValue() - y;
Введите эти координаты в приведенный выше код изображения, и все готово.