https://docs.aspose.com/pdf/java/complex-pdf-example/
My test code as below:
@Test
public void tttt() throws IOException {
// Initialize document object
Document document = new Document("E:\\tmp\\sign\\issue_test\\aspose.pdf");
// Add page
Page page = document.getPages().get_Item(1);
// -------------------------------------------------------------
Path _dataDir = Paths.get("E:\\tmp\\sign\\issue_test");
// Add image
Path imageFileName = Paths.get(_dataDir.toString(), "aspose.png");
java.io.FileInputStream imageStream = new java.io.FileInputStream(new java.io.File(imageFileName.toString()));
// Add image to Images collection of Page Resources
page.getResources().getImages().add(imageStream);
log.info("mediaBox: {}", page.getMediaBox());
log.info("mediaBox llx: {}", page.getMediaBox().getLLX());
log.info("mediaBox lly: {}", page.getMediaBox().getLLY());
log.info("mediaBox urx: {}", page.getMediaBox().getURX());
log.info("mediaBox ury: {}", page.getMediaBox().getURY());
log.info("cropBox: {}", page.getCropBox());
log.info("margin left: {}", page.getPageInfo().getMargin().getLeft());
log.info("margin right: {}", page.getPageInfo().getMargin().getRight());
log.info("margin top: {}", page.getPageInfo().getMargin().getTop());
log.info("margin bottom: {}", page.getPageInfo().getMargin().getBottom());
// Using GSave operator: this operator saves current graphics state
page.getContents().add(new GSave());
Rectangle _logoPlaceHolder = new Rectangle(220, 330, 420, 530);
// Create Matrix object
Matrix matrix = new Matrix(new double[]{
_logoPlaceHolder.getURX() - _logoPlaceHolder.getLLX(), 0, 0,
_logoPlaceHolder.getURY() - _logoPlaceHolder.getLLY(),
_logoPlaceHolder.getLLX(), _logoPlaceHolder.getLLY()});
// Using ConcatenateMatrix (concatenate matrix) operator: defines how image must be placed
page.getContents().add(new ConcatenateMatrix(matrix));
XImage ximage = page.getResources().getImages().get_Item(page.getResources().getImages().size());
// Using Do operator: this operator draws image
page.getContents().add(new Do(ximage.getName()));
// Using GRestore operator: this operator restores graphics state
page.getContents().add(new GRestore());
document.save(Paths.get(_dataDir.toString(), "Complex.pdf").toString());
}