Аннотации к PDF фигурам

Добавление аннотаций квадратов или кругов

Аннотации квадратов и кругов должны отображать, соответственно, прямоугольник или эллипс на странице. При открытии они должны показывать всплывающее окно, содержащее текст связанной заметки. Аннотации квадратов похожи на аннотации кругов (экземпляры класса Aspose.Pdf.Annotations.CircleAnnotation), за исключением формы.

Шаги для создания аннотаций квадратов и кругов:

  1. Загрузите PDF-файл - новый Document.

  2. Создайте новую Circle Annotation и установите параметры круга (new Rectangle, title, color, InteriorColor, Opacity).

  3. Создайте новую PopupAnnotation.

  4. Далее нам нужно создать Square Annotation.

  5. Установите те же параметры квадрата (new Rectangle, title, color, InteriorColor, Opacity).

  6. После этого нам нужно добавить аннотации квадрата и круга на страницу.

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

package com.aspose.pdf.examples;

import java.util.*;
import com.aspose.pdf.*;

public class ExampleCircleAnnotation {

    // Путь к каталогу документов.
    private static String _dataDir = "/home/admin1/pdf-examples/Samples/";

    public static void AddCircleAnnotation() {
        try {
            // Загрузить PDF файл
            Document document = new com.aspose.pdf.Document(_dataDir + "appartments.pdf");
            Page page = document.getPages().get_Item(1);

            // Создать аннотацию круга
            CircleAnnotation circleAnnotation = new CircleAnnotation(page, new Rectangle(270, 160, 483, 383));
            circleAnnotation.setTitle("John Smith");
            circleAnnotation.setColor(Color.getRed());
            circleAnnotation.setInteriorColor(Color.getMistyRose());
            circleAnnotation.setOpacity(0.5);
            circleAnnotation.setPopup(new PopupAnnotation(page, new Rectangle(842, 316, 1021, 459)));

            // Создать аннотацию квадрата
            SquareAnnotation squareAnnotation = new SquareAnnotation(page, new Rectangle(67, 317, 261, 459));
            squareAnnotation.setTitle("John Smith");
            squareAnnotation.setColor(Color.getBlue());
            squareAnnotation.setInteriorColor(Color.getBlueViolet());
            squareAnnotation.setOpacity(0.25);
            squareAnnotation.setPopup(new PopupAnnotation(page, new Rectangle(842, 196, 1021, 338)));

            // Добавить аннотацию на страницу
            page.getAnnotations().add(circleAnnotation);
            page.getAnnotations().add(squareAnnotation);
            document.save(_dataDir + "appartments_mod.pdf");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

Как пример, мы увидим следующий результат добавления аннотаций Квадрат и Круг в PDF документ:

Демонстрация аннотации Круг и Квадрат

Получить аннотацию Круг

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

public static void GetCircleAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Фильтрация аннотаций с использованием AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new CircleAnnotation(page, Rectangle.getTrivial()));
        page.accept(annotationSelector);
        List<Annotation> caretAnnotations = annotationSelector.getSelected();

        // вывод результатов
        for (Annotation ca : caretAnnotations) {
            System.out.println(ca.getRect());
        }
    }

Удалить аннотацию Круг

Следующий фрагмент кода показывает, как удалить аннотацию Круг из PDF файла.

public static void DeleteCircleAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Фильтрация аннотаций с использованием AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new CircleAnnotation(page, Rectangle.getTrivial()));
        page.accept(annotationSelector);
        List<Annotation> circleAnnotations = annotationSelector.getSelected();

        for (Annotation ca : circleAnnotations) {
            page.getAnnotations().delete(ca);
        }
        document.save(_dataDir + "appartments_del.pdf");
    }

Добавление аннотаций многоугольников и полилиний

Инструмент полилинии позволяет создавать фигуры и контуры с произвольным количеством сторон на документе.

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

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

Шаги, с помощью которых мы создаем аннотации для многоугольника и полилинии:

  1. Загрузите PDF файл - новый Document.
  2. Создайте новую Polygon Annotation и установите параметры многоугольника (новый Rectangle, новые Points, заголовок, цвет, InteriorColor и Opacity).
  3. Создайте новую PopupAnnotation.
  4. Далее создайте PolyLine Annotation и повторите все действия.
  5. После этого можно добавить аннотации на страницу.

Следующий фрагмент кода показывает, как добавить аннотации многоугольника и полилинии в PDF файл:

 package com.aspose.pdf.examples;

import java.util.*;
import com.aspose.pdf.*;

public class ExamplePolygonAnnotation {
    private static String _dataDir = "/home/admin1/pdf-examples/Samples/";

    public static void AddPolynnotation() {
        try {
            // Загрузите PDF файл
            Document document = new Document(_dataDir + "appartments.pdf");
            Page page = document.getPages().get_Item(1);

            // Создайте аннотацию многоугольника
            PolygonAnnotation polygonAnnotation = new PolygonAnnotation(page, new Rectangle(270, 193, 571, 383),
                    new Point[] { new Point(274, 381), new Point(555, 381), new Point(555, 304), new Point(570, 304),
                            new Point(570, 195), new Point(274, 195) });

            polygonAnnotation.setTitle("John Smith");
            polygonAnnotation.setColor(Color.getBlue());
            polygonAnnotation.setInteriorColor(Color.getBlueViolet());
            polygonAnnotation.setOpacity(0.25);
            polygonAnnotation.setPopup(new PopupAnnotation(page, new Rectangle(842, 196, 1021, 338)));

            // Создайте аннотацию полилинии
            PolylineAnnotation polylineAnnotation = new PolylineAnnotation(page, new Rectangle(270, 193, 571, 383),
                    new Point[] { new Point(545, 150), new Point(545, 190), new Point(667, 190), new Point(667, 110),
                            new Point(626, 111) });

            polygonAnnotation.setTitle("John Smith");
            polygonAnnotation.setColor(Color.getRed());
            polygonAnnotation.setPopup(new PopupAnnotation(page, new Rectangle(842, 196, 1021, 338)));

            // Добавьте аннотацию на страницу
            page.getAnnotations().add(polygonAnnotation);
            page.getAnnotations().add(polylineAnnotation);
            document.save(_dataDir + "appartments_mod.pdf");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

Получение аннотаций многоугольника и полилинии

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

    public static void GetPolyAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "Appartments_mod.pdf");
        Page page = document.getPages().get_Item(1);

        AnnotationSelector annotationSelector = new AnnotationSelector(
                new PolylineAnnotation(page, Rectangle.getTrivial(), null));
        page.accept(annotationSelector);
        List<Annotation> polyAnnotations = annotationSelector.getSelected();

        for (Annotation pa : polyAnnotations) {
            System.out.printf("[%s]", pa.getRect());
        }
    }

Удаление аннотаций многоугольника и полилинии

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

        public static void DeletePolyAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "Appartments_mod.pdf");
        Page page = document.getPages().get_Item(1);

        AnnotationSelector annotationSelector = new AnnotationSelector(
                new PolylineAnnotation(page, Rectangle.getTrivial(), null));
        page.accept(annotationSelector);
        List<Annotation> polyAnnotations = annotationSelector.getSelected();

        for (Annotation pa : polyAnnotations) {
            page.getAnnotations().delete(pa);
        }

        document.save(_dataDir + "Appartments_del.pdf");
    }

Как добавить аннотацию линии в существующий PDF файл

Цель аннотации линии — отображение одной прямой линии на странице. При открытии должна отображаться всплывающая информация с текстом связанной заметки. Эта функция добавляет дополнительные записи, специфичные для аннотации линии. Эти записи шифруются в виде букв, например, LL, BS, IC и так далее.

Также аннотация линии может включать заголовок к аннотации линии, который указывается установкой Cap в true.

Следующая функция позволяет применить заголовок к аннотации линии, которая имеет смещение ведущей линии. Также этот вид аннотации позволяет определить стили окончания линии.

Шаги, с помощью которых мы создаем аннотацию линии:

  1. Загрузите PDF файл - новый Document.

  2. Создайте новую аннотацию линии и установите параметры линии (новый Rectangle, новый Point, заголовок, цвет, ширина, StartingStyle и EndingStyle).

  3. Создайте новый PopupAnnotation.

  4. Затем мы можем добавить аннотацию на страницу

Следующий фрагмент кода показывает, как добавить аннотацию линии в PDF файл:

package com.aspose.pdf.examples;

import java.util.*;
import com.aspose.pdf.*;

public class ExampleLineAnnotation {

    // Путь к директории с документами.
    private static String _dataDir = "/home/admin1/pdf-examples/Samples/";

    public static void AddLineAnnotation() {
        try {
            // Загрузите PDF файл
            Document document = new Document(_dataDir + "appartments.pdf");
            Page page = document.getPages().get_Item(1);

            // Создайте аннотацию линии
            LineAnnotation lineAnnotation = new LineAnnotation(page, new Rectangle(550, 93, 562, 439),
                    new Point(556, 99), new Point(556, 443));

            lineAnnotation.setTitle("John Smith");
            lineAnnotation.setColor(Color.getRed());
            lineAnnotation.setWidth(3);
            lineAnnotation.setStartingStyle(LineEnding.OpenArrow);
            lineAnnotation.setEndingStyle(LineEnding.OpenArrow);
            lineAnnotation.setPopup(new PopupAnnotation(page, new Rectangle(842, 124, 1021, 266)));

            // Добавьте аннотацию на страницу
            page.getAnnotations().add(lineAnnotation);
            document.save(_dataDir + "appartments_mod.pdf");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

Получить Аннотацию Линии

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

    public static void GetLineAnnotation() {
        // Загрузить PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Отфильтровать аннотации с использованием AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new LineAnnotation(page, Rectangle.getTrivial(), Point.getTrivial(), Point.getTrivial()));
        page.accept(annotationSelector);
        List<Annotation> lineAnnotations = annotationSelector.getSelected();

        // вывести результаты
        for (Annotation la : lineAnnotations) {
            LineAnnotation l = (LineAnnotation) la;
            System.out.println("[" + l.getStarting().getX() + "," + l.getStarting().getY() + "]" + "["
                    + l.getEnding().getX() + "," + l.getEnding().getY() + "]");
        }
    }

Удалить Аннотацию Линии

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

   public static void DeleteLineAnnotation() {
        // Загрузить PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Отфильтровать аннотации с помощью AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new LineAnnotation(page, Rectangle.getTrivial(), Point.getTrivial(), Point.getTrivial()));
        page.accept(annotationSelector);
        List<Annotation> lineAnnotations = annotationSelector.getSelected();

        // напечатать результаты
        for (Annotation la : lineAnnotations) {
            page.getAnnotations().delete(la);
        }
        document.save(_dataDir + "appartments_del.pdf");
    }
}

Как добавить аннотацию чернила в PDF файл

Аннотация чернила представляет собой произвольную “закорючку”, состоящую из одного или нескольких несвязанных путей. При открытии должно отображаться всплывающее окно с текстом связанной заметки.

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

package com.aspose.pdf.examples;

import java.util.*;
import com.aspose.pdf.*;

public class ExampleInkAnnotation {

    // Путь к каталогу документов.
    private static String _dataDir = "/home/admin1/pdf-examples/Samples/";

    public static void AddInkAnnotation() {
        try {
            // Загрузите PDF-файл
            Document document = new com.aspose.pdf.Document(_dataDir + "Appartments.pdf");
            Page page = document.getPages().get_Item(1);
            Rectangle arect = new Rectangle(320.086,189.286,384.75,228.927);
            List<Point[]> inkList = new ArrayList<Point[]>();
            //данные в ppts, полученные от мыши или другого указательного устройства
            double ppts[] = { 328.002, 222.017, 328.648, 222.017, 329.294, 222.017, 329.617, 222.34, 330.91, 222.663,
                    331.556, 222.663, 332.203, 222.986, 333.495, 223.633, 334.141, 223.956, 334.788, 224.279, 335.434,
                    224.602, 336.08, 224.602, 336.727, 224.925, 337.373, 225.248, 337.696, 225.248, 338.342, 225.572,
                    338.989, 225.895, 341.897, 225.895, 343.513, 226.218, 346.098, 226.218, 348.683, 226.541, 350.622,
                    226.541, 352.238, 226.541, 353.208, 226.541, 353.854, 226.541, 355.146, 226.541, 356.439, 226.541,
                    357.732, 226.541, 358.378, 226.541, 359.024, 226.541, 360.64, 226.541, 361.286, 226.541, 361.933,
                    226.541, 362.256, 226.541, 362.902, 226.541, 363.548, 226.541, 363.872, 226.541, 363.872, 226.218,
                    365.164, 226.218, 365.487, 226.218, 365.811, 226.218, 367.103, 226.218, 367.749, 226.218, 368.719,
                    226.218, 370.012, 226.218, 370.981, 226.218, 371.627, 226.218, 372.597, 225.895, 372.92, 225.895,
                    373.243, 225.895, 373.243, 225.572, 373.566, 225.572, 374.213, 225.248, 374.536, 225.248, 375.182,
                    224.602, 375.182, 224.279, 375.828, 223.956, 376.475, 223.31, 377.121, 222.986, 377.767, 222.986,
                    378.414, 222.017, 379.383, 221.371, 379.706, 220.724, 380.029, 219.432, 380.676, 219.109, 380.676,
                    218.462, 381.645, 217.493, 381.968, 217.17, 381.968, 216.523, 382.291, 215.554, 382.615, 215.231,
                    382.615, 214.261, 382.938, 213.292, 382.938, 212.645, 382.938, 211.999, 382.938, 211.353, 382.938,
                    210.707, 382.938, 209.737, 382.938, 208.768, 382.938, 208.444, 382.615, 207.475, 382.615, 206.829,
                    382.291, 206.505, 382.291, 205.859, 381.968, 204.89, 381.968, 204.243, 381.645, 203.92, 380.999,
                    203.274, 380.999, 202.951, 380.676, 202.305, 380.353, 201.658, 380.029, 201.335, 380.029, 200.689,
                    380.029, 200.366, 379.383, 199.719, 379.06, 199.719, 378.737, 199.073, 377.767, 198.103, 377.121,
                    197.780, 376.475, 197.457, 375.505, 196.488, 374.859, 196.165, 374.536, 195.841, 372.92, 195.195,
                    371.951, 194.549, 370.658, 194.226, 368.719, 193.902, 367.426, 193.256, 366.457, 193.256, 363.872,
                    192.933, 362.902, 192.933, 361.61, 192.61, 359.024, 192.61, 357.409, 192.61, 356.439, 192.61,
                    353.531, 192.61, 352.561, 192.61, 350.945, 192.61, 349.007, 192.933, 348.36, 193.256, 347.391,
                    193.256, 346.098, 193.902, 345.452, 193.902, 344.806, 193.902, 343.513, 193.902, 342.867, 193.902,
                    342.220, 193.902, 341.574, 193.902, 341.251, 194.226, 340.928, 194.226, 340.928, 194.549, 340.605,
                    194.549, 340.605, 194.872, 339.635, 195.195, 339.635, 195.518, 338.989, 195.518, 338.989, 195.841,
                    338.666, 196.165, 338.019, 196.811, 338.019, 197.134, 337.373, 197.457, 336.404, 198.427, 335.757,
                    198.427, 335.434, 198.75, 334.141, 199.719, 333.818, 199.719, 333.818, 200.042, 332.849, 200.366,
                    332.203, 200.366, 331.556, 201.335, 330.91, 201.981, 330.587, 202.305, 330.264, 202.305, 329.294,
                    202.628, 328.971, 202.951, 328.002, 203.274, 328.002, 203.597, 327.355, 204.243, 326.709, 204.567,
                    326.386, 204.89, 326.063, 205.536, 325.416, 205.859, 325.093, 205.859, 324.447, 205.859, 324.124,
                    206.182, 324.124, 206.505, 323.477, 206.829, 323.477, 207.152, 323.477, 207.798, 322.831, 207.798,
                    322.831, 208.121, 322.831, 208.444, 322.508, 208.444, 322.508, 209.091, 322.185, 209.414, 322.185,
                    209.737, 322.185, 210.383, 322.185, 211.03, 322.185, 211.353, 322.185, 211.676, 322.185, 212.322,
                    323.154, 213.292, 323.154, 213.938, 324.447, 214.584, 325.093, 215.877, 325.416, 216.2, 325.416,
                    216.846, 325.739, 217.17, 326.063, 217.493, 326.386, 218.139, 326.709, 218.139, 326.709, 218.462,
                    327.032, 219.109, 327.032, 219.432, 327.032, 219.755, 327.355, 220.078, 327.355, 220.401, 327.678,
                    221.371, 328.002, 221.371, 328.002, 222.017, 328.325, 222.663, 328.648, 222.663, 328.971, 222.986,
                    329.294, 223.31, 329.617, 223.956, 329.617, 224.279 };

            //преобразовать данные в точки
            Point[] arrpt = new Point[ppts.length/2];
            for (int i = 0, j=0; i < arrpt.length; i++, j+=2) {
                arrpt[i] = new Point(ppts[j],ppts[j+1]);
            }
            inkList.add(arrpt);

            InkAnnotation ia = new InkAnnotation(page, arect, inkList);
            ia.setTitle("Aspose User");
            ia.setColor(Color.getRed());
            ia.setCapStyle(CapStyle.Rounded);

            Border border = new Border(ia);
            border.setWidth(3);
            ia.setOpacity(0.75);

            page.getAnnotations().add(ia);
            document.save(_dataDir + "appartments_mod.pdf");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

Получение InkAnnotation из вашего PDF

Вы можете получить InkAnnotation с помощью следующего фрагмента кода:

public static void GetInkAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Фильтрация аннотаций с использованием AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new InkAnnotation(page, Rectangle.getTrivial(), null));
        page.accept(annotationSelector);
        List<Annotation> inkAnnotations = annotationSelector.getSelected();

        // вывод результатов
        for (Annotation ia : inkAnnotations) {
            System.out.println(ia.getRect());
        }
    }

Удаление InkAnnotation

Aspose.PDF для Java позволяет удалять InkAnnotation из вашего PDF файла.

public static void DeleteInkAnnotation() {
        // Загрузите PDF файл
        Document document = new Document(_dataDir + "appartments_mod.pdf");

        // Фильтрация аннотаций с использованием AnnotationSelector
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new InkAnnotation(page, Rectangle.getTrivial(), null));
        page.accept(annotationSelector);
        List<Annotation> InkAnnotations = annotationSelector.getSelected();

        for (Annotation ca : InkAnnotations) {
            page.getAnnotations().delete(ca);
        }
        document.save(_dataDir + "appartments_del.pdf");
    }