Использование дополнительных типов аннотаций PDF
Как добавить аннотацию вставки в существующий PDF файл
Аннотация вставки - это символ, указывающий на редактирование текста. Аннотация вставки также является аннотацией разметки, поэтому класс Caret наследуется от класса Markup и также предоставляет функции для получения или установки свойств аннотации вставки и сброса потока внешнего вида аннотации вставки.
Шаги, с помощью которых мы создаем аннотацию вставки:
-
Загрузите PDF файл - new Document.
-
Создайте новый Caret Annotation и установите параметры Caret (новый Rectangle, title, Subject, Flags, color, width, StartingStyle и EndingStyle). Эта аннотация используется для указания вставки текста.
-
Создайте новый StrikeOutAnnotation и установите параметры (новый Rectangle, title, color, new QuadPoints и новые точки, Subject, InReplyTo, ReplyType).
-
После этого мы можем добавить аннотации на страницу.
Следующий фрагмент кода показывает, как добавить аннотацию Caret в PDF файл:
package com.aspose.pdf.examples;
import java.util.*;
import com.aspose.pdf.*;
public class ExampleCaretAnnotation {
private static String _dataDir = "/home/admin1/pdf-examples/Samples/";
public static void AddCaretAnnotation() {
// Загрузить PDF файл
Document document = new Document(_dataDir + "sample.pdf");
// Эта аннотация используется для указания вставки текста
CaretAnnotation caretAnnotation1 = new CaretAnnotation(
document.getPages().get_Item(1), new Rectangle(299.988, 713.664, 308.708, 720.769));
caretAnnotation1.setTitle("Пользователь Aspose");
caretAnnotation1.setSubject("Вставленный текст 1");
caretAnnotation1.setFlags(AnnotationFlags.Print);
caretAnnotation1.setColor(Color.getBlue());
// Эта аннотация используется для указания замены текста
CaretAnnotation caretAnnotation2 = new CaretAnnotation(
document.getPages().get_Item(1), new Rectangle(361.246, 727.908, 370.081, 735.107));
caretAnnotation2.setTitle("Пользователь Aspose");
caretAnnotation2.setFlags(AnnotationFlags.Print);
caretAnnotation2.setSubject("Вставленный текст 2");
caretAnnotation2.setColor(Color.getBlue());
StrikeOutAnnotation strikeOutAnnotation = new StrikeOutAnnotation(
document.getPages().get_Item(1), new Rectangle(318.407, 727.826, 368.916, 740.098));
strikeOutAnnotation.setColor(Color.getBlue());
strikeOutAnnotation.setQuadPoints(new Point[] { new Point(321.66, 739.416),
new Point(365.664, 739.416), new Point(321.66, 728.508),
new Point(365.664, 728.508) });
strikeOutAnnotation.setSubject("Зачеркнуть");
strikeOutAnnotation.setInReplyTo(caretAnnotation2);
strikeOutAnnotation.setReplyType(ReplyType.Group);
document.getPages().get_Item(1).getAnnotations().add(caretAnnotation1);
document.getPages().get_Item(1).getAnnotations().add(caretAnnotation2);
document.getPages().get_Item(1).getAnnotations().add(strikeOutAnnotation);
document.save(_dataDir + "sample_caret.pdf");
}
Получение Аннотации Карет
Пожалуйста, попробуйте использовать следующий код для получения аннотации карет в PDF документе
public static void GetCaretAnnotation() {
// Загрузите PDF файл
Document document = new Document(_dataDir + "sample_caret.pdf");
// Фильтрация аннотаций с использованием AnnotationSelector
Page page = document.getPages().get_Item(1);
AnnotationSelector annotationSelector = new AnnotationSelector(
new CaretAnnotation(page, Rectangle.getTrivial()));
page.accept(annotationSelector);
List<Annotation> caretAnnotations = annotationSelector.getSelected();
// вывод результатов
for (Annotation ca : caretAnnotations) {
System.out.println(ca.getRect());
}
}
Удаление Аннотации Карет
Следующий код показывает, как удалить аннотацию карет из PDF файла.
public static void DeleteCaretAnnotation() {
// Загрузите PDF файл
Document document = new Document(_dataDir + "sample_caret.pdf");
// Фильтрация аннотаций с использованием AnnotationSelector
Page page = document.getPages().get_Item(1);
AnnotationSelector annotationSelector = new AnnotationSelector(
new CaretAnnotation(page, Rectangle.getTrivial()));
page.accept(annotationSelector);
List<Annotation> caretAnnotations = annotationSelector.getSelected();
// удаление аннотации
for (Annotation ca : caretAnnotations) {
document.getPages().get_Item(1).getAnnotations().delete(ca);
}
document.save(_dataDir + "sample_caret_del.pdf");
}
A Link Annotation является гипертекстовой ссылкой, которая ведет к месту назначения в другом месте документа или к действию, которое должно быть выполнено.
Добавить аннотацию ссылки
Ссылка — это прямоугольная область, которую можно разместить в любом месте на странице. Каждая ссылка имеет соответствующее действие PDF, связанное с ней. Это действие выполняется, когда пользователь нажимает в области этой ссылки.
Следующий фрагмент кода показывает, как добавить аннотацию ссылки в PDF-файл, используя пример с номером телефона:
package com.aspose.pdf.examples;
import java.util.*;
import com.aspose.pdf.*;
public class ExampleLinkAnnotation {
// Путь к каталогу документов.
private static String _dataDir = "/home/admin1/pdf-examples/Samples/";
public static void AddLinkAnnotation() {
try {
// Загрузить PDF-файл
Document document = new Document(_dataDir + "SimpleResume.pdf");
Page page = document.getPages().get_Item(1);
// Создать объект TextFragmentAbsorber для поиска номера телефона
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("678-555-0103");
// Применить абсорбер только для 1-й страницы
page.accept(textFragmentAbsorber);
TextFragment phoneNumberFragment = textFragmentAbsorber.getTextFragments().get_Item(1);
// Создать аннотацию ссылки и установить действие для вызова телефонного номера
LinkAnnotation linkAnnotation = new LinkAnnotation(page, phoneNumberFragment.getRectangle());
linkAnnotation.setAction(new GoToURIAction("callto:678-555-0103"));
// Добавить аннотацию на страницу
page.getAnnotations().add(linkAnnotation);
document.save(_dataDir + "SimpleResume_mod.pdf");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
Получить Аннотацию Ссылки
Пожалуйста, попробуйте использовать следующий фрагмент кода, чтобы получить LinkAnnotation из PDF-документа.
public static void GetLinkAnnotations() {
// Загрузить PDF файл
Document document = new Document(_dataDir + "SimpleResume_mod.pdf");
// Отфильтровать аннотации с использованием AnnotationSelector
Page page = document.getPages().get_Item(1);
AnnotationSelector annotationSelector = new AnnotationSelector(
new LinkAnnotation(page, Rectangle.getTrivial()));
page.accept(annotationSelector);
List<Annotation> linkAnnotations = annotationSelector.getSelected();
// вывести результаты
for (Annotation la : linkAnnotations) {
LinkAnnotation l = (LinkAnnotation) la;
// Вывести URL каждой аннотации ссылки
System.out.println("URI: " + ((GoToURIAction) l.getAction()).getURI());
TextAbsorber absorber = new TextAbsorber();
absorber.getTextSearchOptions().setLimitToPageBounds(true);
absorber.getTextSearchOptions().setRectangle(l.getRect());
page.accept(absorber);
String extractedText = absorber.getText();
// Вывести текст, связанный с гиперссылкой
System.out.println(extractedText);
}
}
Удаление аннотации ссылки
Следующий фрагмент кода показывает, как удалить аннотацию ссылки из PDF-файла. Для этого нам нужно найти и удалить все аннотации ссылки на первой странице. После этого мы сохраним документ с удаленной аннотацией.
public static void DeleteLinkAnnotations() {
// Загрузить PDF файл
Document document = new Document(_dataDir + "SimpleResume_mod.pdf");
// Фильтрация аннотаций с использованием AnnotationSelector
Page page = document.getPages().get_Item(1);
AnnotationSelector annotationSelector = new AnnotationSelector(
new LinkAnnotation(page, Rectangle.getTrivial()));
page.accept(annotationSelector);
List<Annotation> linkAnnotations = annotationSelector.getSelected();
for (Annotation la : linkAnnotations)
page.getAnnotations().delete(la);
// Сохранить документ с удаленной аннотацией
document.save(_dataDir + "SimpleResume_del.pdf");
}
Сокрытие определенной области страницы с использованием аннотации редактирования с помощью Aspose.PDF для Java
Aspose.PDF for Java поддерживает возможность добавления и управления аннотациями в существующем PDF файле. Недавно некоторые из наших клиентов выразили необходимость редактирования (удаления текста, изображений и т.д. элементов) определенного региона страницы PDF документа. Для выполнения этого требования предоставлен класс под названием RedactionAnnotation, который может быть использован для редактирования определенных регионов страницы или для управления существующими RedactionAnnotations и их редактирования (т.е. уплощения аннотации и удаления текста под ней).
package com.aspose.pdf.examples;
import com.aspose.pdf.*;
import com.aspose.pdf.facades.PdfAnnotationEditor;
public class ExampleRedactAnnotation {
private static String _dataDir = "/home/admin1/pdf-examples/Samples/";
public static void RedactionAnnotation() {
// Открыть документ
Document document = new Document(_dataDir + "sample.pdf");
Page page = document.getPages().get_Item(1);
// Создать экземпляр RedactionAnnotation для определенного региона страницы
RedactionAnnotation annot = new RedactionAnnotation(page, new Rectangle(200, 500, 300, 600));
annot.setFillColor(Color.getGreen());
annot.setBorderColor(Color.getYellow());
annot.setColor(Color.getBlue());
// Текст для печати на редактируемой аннотации
annot.setOverlayText("REDACTED");
annot.setTextAlignment(HorizontalAlignment.Center);
// Повторить наложенный текст на редактируемой аннотации
annot.setRepeat(true);
// Добавить аннотацию в коллекцию аннотаций первой страницы
page.getAnnotations().add(annot);
// Уплощает аннотацию и редактирует содержимое страницы (т.е. удаляет текст и изображение
// Под редактируемой аннотацией)
annot.redact();
document.save(_dataDir + "RedactPage_out.pdf");
}
Facades подход
Пространство имен Aspose.PDF.Facades также содержит класс под названием PdfAnnotationEditor, который предоставляет возможность изменять существующие аннотации внутри PDF файла. Этот класс содержит метод с именем RedactArea(..), который предоставляет возможность удалять определенные области страницы.
public static void RedactionAnnotationFacades(){
PdfAnnotationEditor editor = new PdfAnnotationEditor();
editor.bindPdf(_dataDir + "sample.pdf");
// Редактировать определенную область страницы
editor.redactArea(1, new Rectangle(100, 100, 20, 70), java.awt.Color.white);
editor.bindPdf(_dataDir + "sample.pdf");
editor.save( _dataDir + "FacadesApproach_out.pdf");
}