Anotações interativas usando Java
As anotações interativas nesta seção concentram‑se em fluxos de trabalho baseados em links e botões que respondem às ações do usuário dentro de um visualizador de PDF.
Adicionar uma anotação de link
Use este exemplo quando precisar colocar um link clicável sobre o texto encontrado na página.
- Abra o PDF de origem em um objeto Document.
- Localize o fragmento de texto alvo e crie um LinkAnnotation sobre o seu retângulo.
- Atribua um GoToURIAction e salve o documento atualizado.
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());
}
}
Obter anotações de link
Este exemplo varre a coleção de anotações da página e relata a localização de cada anotação de link.
- Abra o PDF de origem em um objeto Document.
- Itere sobre as anotações na página de destino.
- Filtre anotações por AnnotationType.
Linke imprima seus retângulos.
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());
}
}
}
}
Excluir anotações de link
Use esta abordagem quando as anotações de link existentes devem ser removidas da página.
- Abra o PDF de origem em um objeto Document.
- Colete anotações cujo tipo é AnnotationType.
Link. - Exclua as anotações coletadas e salve o arquivo de saída.
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());
}
}
Adicionar uma anotação de linha
Este exemplo cria uma anotação de linha interativa com estilos de seta, configurações de borda e uma nota pop-up.
- Abra o PDF de origem em um objeto Document.
- Crie um LineAnnotation com pontos de início e fim.
- Configure sua aparência e a anotação popup, então salve o documento.
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());
}
}
Adicionar botões de navegação
Use este exemplo quando o PDF deve incluir botões de página anterior e página seguinte para navegação interativa.
- Abra o PDF de origem em um objeto Document e certifique-se de que o documento tenha as páginas necessárias.
- Crie ButtonField controles com ações de navegação predefinidas.
- Adicione os botões à coleção de formulários e salve o documento atualizado.
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());
}
}
Adicionar um botão de impressão
Este exemplo cria um botão que aciona o comando de impressão quando o usuário clica nele.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um ButtonField e atribua a ação de impressão predefinida.
- Configure a borda e o fundo do botão, adicione‑o ao formulário e salve o documento.
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());
}
}