Аннотировать PDF

Этот блог является продолжением нашего предыдущего блога, в котором мы осветили некоторые интересные функции Aspose.PDF Cloud SDK для Java о том, как добавлять выделение или зачеркивание текста, а также добавлять аннотации линий или окружностей в PDF с помощью Java REST API. В этой статье мы, в частности, обсудим детали добавления аннотаций текста, полилиний, волнистых линий и вложений в документы PDF с помощью языка программирования Java.

Aspose.PDF Cloud — это REST API, который позволяет пользователям создавать, изменять и преобразовывать существующие PDF-файлы в другие поддерживаемые форматы документов. Доступ к Cloud API можно получить с помощью следующих двух подходов:

  • Доступ к API через команды cURL
  • Доступ к API на языке программирования Java

Давайте подробнее обсудим добавление различных аннотаций к документам PDF с использованием команд cURL и кода Java.

Добавьте аннотации с помощью команды cURL

Команды cURL — один из самых простых и крутых способов доступа к REST API. Давайте поговорим о добавлении различных аннотаций с помощью команд cURL. Обратите внимание, что каждый API также позволяет вам получить доступ к облачному хранилищу, где файлы могут храниться для обработки, поэтому для обеспечения целостности данных наши API доступны только авторизованным лицам. Поэтому вам сначала нужно посетить панель управления Aspose.Cloud и, если у вас есть учетная запись GitHub или Google, просто зарегистрироваться. В противном случае нажмите кнопку Создать новую учетную запись и укажите необходимую информацию. Теперь войдите в панель управления, используя учетные данные, разверните раздел «Приложения» на панели управления и прокрутите вниз до раздела «Учетные данные клиента», чтобы увидеть сведения об идентификаторе клиента и секретном ключе клиента.

Теперь следующим шагом будет генерация JSON Web Token (JWT), чтобы API были доступны через командную строку.

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=7042694c-5251-4aba-83c9-e81e7518724f&client_secret=db246d4742e8cd22e7266c9391992689" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

Текстовая аннотация

Текстовая аннотация — это аннотация, прикрепленная к определенному месту в документе PDF. При закрытии аннотация отображается в виде значка; при открытии должно отображаться всплывающее окно, содержащее текст заметки шрифтом и размером, выбранными читателем. Чтобы добавить текстовую аннотацию, нам нужно использовать API PostPageTextAnnotation. Используйте следующую команду cURL, чтобы добавить текстовую аннотацию со значком заметки.

 curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/text" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[{  \"Color\": {  \"A\": 0, \"R\": 0xDA,  \"G\": 0xA5, \"B\": 0x20    },  \"Contents\": \"Hello World \",  \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"string\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 800,      \"URX\": 100,      \"URY\": 100    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"string\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Annotation Title\",    \"RichText\": \"string\",    \"State\": \"Undefined\",    \"Open\": true,    \"Icon\": \"Note\"  }]"
Текстовая аннотация в формате PDF

Изображение 1: Текстовая аннотация со значком примечания в PDF-файле.

Образцы файлов PDF, использованные в приведенном выше примере, можно загрузить по следующим ссылкам.

Аннотация полилинии

Аннотации Polyline используются для ручного рисования полилиний на странице. Они могут содержать любое количество сторон, определяемых вершинами полилинии. Аннотации Polyline с прозрачным цветом заливки можно выбирать только вокруг их видимых линий. Аннотации Polyline также можно добавлять с помощью API PostPagePolyLineAnnotations.

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/polyline" \
-H  "accept: application/json" \
-H  "authorization: Bearer " \
-H  "Content-Type: application/json" \
-d "[  {       \"Color\": {      \"A\": 0,      \"R\": 122,      \"G\": 132,      \"B\": 255    },    \"Contents\": \"Hello World...\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"Polyline\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 150,      \"URY\": 250    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Title of Annotation\",    \"RichText\": \"<?xml version=\\\"1.0\\\"?><body xmlns=\\\"http://www.w3.org/1999/xhtml\\\" xmlns:xfa=\\\"http://www.xfa.org/schema/xfa-data/1.0/\\\" xfa:APIVersion=\\\"Acrobat:7.0.0\\\" xfa:spec=\\\"2.0.2\\\" ><span style=\\\"text-decoration:;font-size:10.0pt\\\">Contents</span></body>\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 120,      \"G\": 110,      \"B\": 255    },    \"StartingStyle\": \"Circle\",    \"EndingStyle\": \"OpenArrow\",    \"Intent\": \"PolyLineDimension\",    \"Vertices\": [      {            \"X\": 164.611,            \"Y\": 499.629          },          {            \"X\": 192.858,            \"Y\": 509.857          },          {            \"X\": 226.461,            \"Y\": 493.785          }    ]  }]"

Волнистая аннотация

annotpdf - npm

Волнистые или зубчатые подчеркнутые аннотации помогают выделить информацию в документе. Их можно добавить с помощью API PostPageSquigglyAnnotations. Приведенная ниже команда поможет вам добавить аннотацию Squiggly в документ PDF.

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/squiggly" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[  {    \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 123,      \"B\": 150    },    \"Contents\": \"A squiggly Annotation\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"First Annotation\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 300,      \"URX\": 120,      \"URY\": 330    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject \",    \"Title\": \"Title of Squiggly\",     \"Starting\": {      \"X\": 162.663,      \"Y\": 654.5    },    \"StartingStyle\": \"Circle\",    \"Ending\": {      \"X\": 230.845,      \"Y\": 654.5    },    \"EndingStyle\": \"OpenArrow\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 220,      \"G\": 220,      \"B\": 220    },    \"LeaderLine\": 10,    \"LeaderLineExtension\": 5,    \"LeaderLineOffset\": 2.5,    \"ShowCaption\": true,    \"CaptionOffset\": {      \"X\": 7,      \"Y\": 8    },    \"CaptionPosition\": \"Top\",    \"Intent\": \"LineArrow\",\"RichText\": \"string\",    \"QuadPoints\": [      {        \"X\": 100,        \"Y\": 200      }    ]  }]"

Вложение Аннотация

Различные файлы могут быть добавлены в качестве аннотаций вложений к документу PDF, и для выполнения этого требования можно использовать API PostPageFileAttachmentAnnotations. Выполните следующую команду cURL, чтобы прикрепить существующий файл к документу PDF. В нашем примере файл с именем PdfWithTable.pdf (уже доступный в облачном хранилище) используется в качестве вложения.

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/fileattachment" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
 -d "[  {       \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 120,      \"B\": 120    },    \"Contents\": \"Content\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"FileAttachment\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 120,      \"URY\": 2200    },    \"PageIndex\": 1,    \"ZIndex\": 0,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Top\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject\",    \"Title\": \"Title\",    \"RichText\": \"string\",    \"Icon\": \"PushPin\",    \"Opacity\": 0,    \"FileDescription\": \"string\",    \"FileName\": \"PdfWithTable.pdf\",    \"FilePath\": \"PdfWithTable.pdf\"  }]"

Добавить аннотации с помощью Java

Помимо команд cURL, другой подход к использованию наших облачных API заключается в доступе к ним через программные SDK. Мы разработали программные SDK для популярных языков программирования. Поэтому для работы с аннотациями в PDF с использованием языка Java попробуйте использовать Aspose.PDF Cloud SDK для Java.

Первый шаг — установить SKD в системе. Cloud SDK доступен для загрузки через Maven и GitHub. Теперь добавьте следующие данные в ваш файл pom.xml для загрузки и использования Aspose.Pdf.jar в вашем проекте сборки Maven.

<repositories>
 <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>https://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>
<dependencies>
 <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf-cloud</artifactId>
        <version>21.1.0</version>
        <scope>compile</scope>
    </dependency>
 </dependencies>

Для получения дополнительной информации посетите страницу Как установить Aspose.Cloud SDK.

Текстовые аннотации

Ниже приведены шаги по добавлению текстовых аннотаций в PDF-документы.

  • Первый шаг — создание объекта PdfApi, в котором мы предоставляем ClientID и ClientSecret в качестве аргументов.
  • Затем мы создаем объект Rectangle, куда добавляется аннотация.
    • LLX — X-координата нижнего левого угла.
    • LLY - Y - координата нижнего левого угла.
    • URY - X - координата верхнего правого угла.
    • URY - Y - координата верхнего правого угла.
  • Создайте объект TextAnnotation, где мы определяем выравнивание с помощью метода setHorizontalAlignment(..).Установите субъект с помощью метода setSubject(…), состояние по умолчанию с помощью метода setState(…) и т. д.
  • Затем создайте объект ArrayList<> типа TextAnnotation и добавьте к нему созданный выше объект TextAnnotation.
  • Наконец, вызовите postPageTextAnnotations(…), куда мы передаем в качестве аргументов имя входного PDF-файла, PageNumber и Annotations ArrayList, созданный выше.
// Получите ClientID и ClientSecret с https://dashboard.aspose.cloud/
String clientId = "7042694c-5251-4aba-83c9-e81e7518724f";
String clientSecret = "db246d4742e8cd22e7266c9391992689";
				
// экземпляр createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// входной PDF-документ
String name = "PdfWithTable.pdf";	        
			    
// Загрузить файл из локальной системы
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// загрузить файл в облачное хранилище
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// Номер страницы, на которую необходимо добавить аннотацию
int pageNumber = 1;

// создать объект Rectangle, в который добавлена аннотация
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// Создать список массива флагов аннотаций
List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// Создать объект TextAnnotation
TextAnnotation textAnnotation = new TextAnnotation();
textAnnotation.setName("Annotation Name");
textAnnotation.setRect(rect);
textAnnotation.setFlags(flags);
textAnnotation.setHorizontalAlignment(HorizontalAlignment.CENTER);

// задать содержимое, которое будет отображаться внутри аннотации
textAnnotation.contents("Hello World...");
// Установить значок для аннотации
textAnnotation.icon(TextIcon.KEY);

textAnnotation.setSubject("Text Box Subj");
textAnnotation.setZindex(1);

// состояние по умолчанию объекта аннотации
textAnnotation.setState(AnnotationState.COMPLETED);
		        
// создать ListArray текстовой аннотации
List<TextAnnotation> annotations = new ArrayList<>();

// добавить созданный выше экземпляр TextAnnotation в список
annotations.add(textAnnotation);

// вызовите метод для добавления аннотации в PDF-файл
AsposeResponse response = pdfApi.postPageTextAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Аннотации полилиний

Cloud SDK также предоставляет те же возможности для добавления аннотаций Polyline в документ PDF. Ниже приведены шаги и фрагмент кода для выполнения этого требования.

  • Во-первых, нам необходимо создать экземпляр PdfApi и загрузить исходный файл в облачное хранилище.
  • Создайте ArrayList типа Point, который определяет точки, в которых будут нарисованы полилинии.
  • Следующим шагом будет создание объекта PolyLineAnnotation, в котором мы определяем прямоугольную область и передаем Points ListArray в метод setVertices(…).
  • Чтобы задать внутренний цвет, используйте метод setInteriorColor(…) и передайте экземпляр Color в качестве аргумента.
  • Теперь вызовите методы startingStyle(…) и endingStyle(…), чтобы определить начальный и конечный стиль аннотации. Эти методы принимают значение из перечисления LineEnding в качестве аргументов.
  • Наконец, вызовите метод postPagePolyLineAnnotations(…) класса PdfApi для отображения аннотации внутри PDF-документа.
// Получите ClientID и ClientSecret с https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// экземпляр createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// входной PDF-документ
String name = "PdfWithTable.pdf";	        
			    
// Загрузить файл из локальной системы
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// загрузить файл в облачное хранилище
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// номер страницы входного файла, куда будет добавлена аннотация
int pageNumber = 1;

// прямоугольная область для аннотации
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// укажите вершины для аннотации
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// создать объект PolyLineAnnotation
PolyLineAnnotation annotation = new PolyLineAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
// установить горизонтальное выравнивание аннотации
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");

// создать цветовой объект
Color color = new Color();
color.setA(255);
color.setR(120);
color.setG(140);
color.setB(130);

// установить внутренний цвет для экземпляра аннотации
annotation.setInteriorColor(color);
		        
annotation.setVertices(vertices);
// указать начальный стиль для аннотации
annotation.startingStyle(LineEnding.OPENARROW);

// установить стиль окончания для аннотации
annotation.endingStyle(LineEnding.SQUARE);

List<PolyLineAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// вызовите метод для добавления аннотации полилинии на первую страницу документа
AsposeResponse response = pdfApi.postPagePolyLineAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Волнистые аннотации

Отдельный класс с именем SquigglyAnnotation используется для добавления аннотации Squiggly в документ PDF. Приведенный ниже фрагмент кода может быть использован для добавления аннотаций Squiggly в файл PDF, доступный в облачном хранилище.

// Получите ClientID и ClientSecret с https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// экземпляр createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// входной PDF-документ
String name = "PdfWithTable.pdf";	        
			    
// Загрузить файл из локальной системы
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// загрузить файл в облачное хранилище
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// номер страницы входного файла, куда будет добавлена аннотация
int pageNumber = 1;

// прямоугольная область для аннотации
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// укажите вершины для аннотации
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// создать объект SquigglyAnnotation
SquigglyAnnotation annotation = new SquigglyAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// создать цветовой объект
Color color = new Color();
color.setA(155);
color.setR(120);
color.setG(140);
color.setB(130);

// установить внутренний цвет для экземпляра аннотации
annotation.color(color);

// установить точки аннотации		        
annotation.setQuadPoints(vertices);

List<SquigglyAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// вызовите метод для добавления аннотации Squiggly на первую страницу документа
AsposeResponse response = pdfApi.postPageSquigglyAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Аннотации к прикрепленным файлам

Чтобы добавить аннотацию вложения файла, попробуйте использовать следующий фрагмент кода. Описание кода такое же, как и в предыдущих разделах, за исключением того, что вам нужно использовать объект FileAttachmentAnnotation для выполнения этого требования.

// Получите ClientID и ClientSecret с https://dashboard.aspose.cloud/
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// экземпляр createPdfApi
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// входной PDF-документ
String name = "PdfWithTable.pdf";	        
			    
// Загрузить файл из локальной системы
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// загрузить файл в облачное хранилище
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// номер страницы входного файла, куда будет добавлена аннотация
int pageNumber = 1;

// прямоугольная область для аннотации
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(100.)
    .URX(200.)
    .URY(200.);

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// создать объект FileAttachmentAnnotation
FileAttachmentAnnotation annotation = new FileAttachmentAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// путь к прикрепленному файлу
annotation.setFilePath("images.jpeg");
// имя файла вложения
annotation.setFileName("images.jpeg");

// создать экземпляр списка FileAttachment
List<FileAttachmentAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// вызовите метод для добавления аннотации FileAttachment на первую страницу документа
AsposeResponse response = pdfApi.postPageFileAttachmentAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

Заключение

В этой статье мы обсудили шаги и сопутствующие детали для добавления аннотаций Text, Polyline, Squiggly и FileAttachment в документ PDF. Поскольку наши Cloud SDK имеют открытый исходный код, вы можете загрузить полный исходный код с GitHub. Репозиторий также содержит другие полезные примеры того, как использовать Java Cloud SDK для создания и управления существующими файлами PDF. Если у вас есть какие-либо связанные вопросы, пожалуйста, свяжитесь с нами через бесплатные форумы поддержки клиентов.

Похожие статьи

Мы настоятельно рекомендуем вам ознакомиться со следующими статьями: