Interactive Annotations using Java
Contents
[
Hide
]
Interactive annotations in this section focus on link and button-based workflows that respond to user actions inside a PDF viewer.
Add a link annotation
Use this example when you need to place a clickable link over text found on the page.
- Open the source PDF Document.
- Locate the target text fragment and create a LinkAnnotation over its rectangle.
- Assign a GoToURIAction and save the updated document.
public static void linkAdd(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("file");
document.getPages().get_Item(1).accept(textFragmentAbsorber);
var phoneNumberFragment = textFragmentAbsorber.getTextFragments().get_Item(1);
LinkAnnotation linkAnnotation = new LinkAnnotation(
document.getPages().get_Item(1),
phoneNumberFragment.getRectangle());
linkAnnotation.setAction(new GoToURIAction("https://www.aspose.com"));
document.getPages().get_Item(1).getAnnotations().add(linkAnnotation);
document.save(outputFile.toString());
}
}
Get link annotations
This example scans the page annotation collection and reports the location of each link annotation.
- Open the source PDF Document.
- Iterate through the annotations on the target page.
- Filter annotations by AnnotationType.
Linkand print their rectangles.
public static void linkGet(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (annotation.getAnnotationType() == AnnotationType.Link) {
System.out.println(annotation.getRect());
}
}
}
}
Delete link annotations
Use this approach when existing link annotations should be removed from the page.
- Open the source PDF Document.
- Collect annotations whose type is AnnotationType.
Link. - Delete the collected annotations and save the output file.
public static void linkDelete(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
List<Annotation> toDelete = new ArrayList<>();
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (annotation.getAnnotationType() == AnnotationType.Link) {
toDelete.add(annotation);
}
}
for (Annotation annotation : toDelete) {
document.getPages().get_Item(1).getAnnotations().delete(annotation);
}
document.save(outputFile.toString());
}
}
Add a line annotation
This example creates an interactive line annotation with arrow styles, border settings, and a popup note.
- Open the source PDF Document.
- Create a LineAnnotation with start and end points.
- Configure its appearance and popup annotation, then save the document.
public static void lineAnnotationAdd(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
LineAnnotation lineAnnotation = new LineAnnotation(
document.getPages().get_Item(1),
new Rectangle(550, 93, 562, 439, true),
new Point(556, 99),
new Point(556, 443));
lineAnnotation.setTitle("John Smith");
lineAnnotation.setColor(Color.getRed());
lineAnnotation.setStartingStyle(LineEnding.OpenArrow);
lineAnnotation.setEndingStyle(LineEnding.OpenArrow);
Border border = new Border(lineAnnotation);
border.setWidth(3);
lineAnnotation.setBorder(border);
PopupAnnotation popup = new PopupAnnotation(
document.getPages().get_Item(1),
new Rectangle(842, 124, 1021, 266, true));
lineAnnotation.setPopup(popup);
document.getPages().get_Item(1).getAnnotations().add(lineAnnotation);
document.save(outputFile.toString());
}
}
Add navigation buttons
Use this example when the PDF should include previous-page and next-page buttons for interactive navigation.
- Open the source PDF Document and make sure the document has the required pages.
- Create ButtonField controls with predefined navigation actions.
- Add the buttons to the form collection and save the updated document.
public static void navigationButtonsAdd(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
document.getPages().add();
record ButtonConfig(String name, double xPos, PredefinedAction action) {}
List<ButtonConfig> buttonConfigs = List.of(
new ButtonConfig("Previous Page", 120.0, PredefinedAction.PrevPage),
new ButtonConfig("Next Page", 230.0, PredefinedAction.NextPage));
for (Page page : document.getPages()) {
for (ButtonConfig config : buttonConfigs) {
Rectangle rect = new Rectangle(config.xPos(), 10.0, config.xPos() + 100, 40.0, true);
ButtonField button = new ButtonField(page, rect);
button.setPartialName(config.name());
button.setValue(config.name());
button.getCharacteristics().setBorder(Color.getRed());
button.getCharacteristics().setBackground(Color.getOrange().toRgb());
button.getAnnotationActions().setOnReleaseMouseBtn(new NamedAction(config.action()));
document.getForm().add(button);
}
}
document.save(outputFile.toString());
}
}
Add a print button
This example creates a button that triggers the print command when the user clicks it.
- Create a new PDF Document and add a page.
- Create a ButtonField and assign the print predefined action.
- Configure the button border and background, add it to the form, and save the document.
public static void printButtonAdd(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Rectangle rect = new Rectangle(72, 748, 164, 768, true);
ButtonField printButton = new ButtonField(page, rect);
printButton.setAlternateName("Print current document");
printButton.setColor(Color.getBlack());
printButton.setPartialName("printBtn1");
printButton.setValue("Print Document");
printButton.getAnnotationActions().setOnReleaseMouseBtn(
new NamedAction(PredefinedAction.File_Print));
Border border = new Border(printButton);
border.setStyle(BorderStyle.Solid);
border.setWidth(2);
printButton.setBorder(border);
printButton.getCharacteristics().setBorder(Color.getBlue());
printButton.getCharacteristics().setBackground(Color.getLightBlue().toRgb());
document.getForm().add(printButton);
document.save(outputFile.toString());
}
}