Добавление аннотаций к фигурам с помощью C#
Приложение для управления документами PDF предоставляет различные инструменты для аннотирования документов. С точки зрения внутренней структуры PDF, эти инструменты являются аннотациями. Мы поддерживаем следующие виды инструментов для рисования.
- Аннотация Линия - инструмент для рисования линий и стрелок
- Аннотация Квадрат - для рисования квадратов и прямоугольников
- Аннотация Круг - для овалов и кругов
- Аннотация Свободный текст - для комментариев-выносок
- Аннотация Многоугольник - для многоугольников и облаков
- Аннотация Полилиния - для соединенных линий
Добавление фигур и форм на страницу
Подход к добавлению аннотации типичен для любой из них.
Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.
- Загрузите PDF-файл или создайте новый с помощью Document.
- Создайте новую аннотацию и установите параметры (новый Rectangle, новый Point, заголовок, цвет, ширина и т.д).
- Свяжите всплывающую аннотацию с оригинальной.
- Добавьте аннотацию на страницу
Добавление линий или стрелок
Цель аннотации линии - отобразить прямую линию или стрелку на странице.
Для создания линии нам нужен новый объект LineAnnotation.
Конструктор класса LineAnnotation принимает четыре параметра:
- страница, на которую будет добавлена аннотация,
- прямоугольник, определяющий границы аннотации,
- и две точки, определяющие начало и конец линии.
Также нам нужно инициализировать некоторые свойства:
Title
- обычно это имя пользователя, который сделал этот комментарийSubject
- может быть любой строкой, но обычно это название аннотации
Для стилизации нашей линии необходимо установить цвет, ширину, стиль начала и стиль окончания. Для стилизации нашей линии нам нужно установить цвет, ширину, начальный стиль и конечный стиль.
Следующий фрагмент кода показывает, как добавить аннотацию линии в файл PDF:
// Загрузить файл PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments.pdf"));
// Создать аннотацию линии
var lineAnnotation = new LineAnnotation(
document.Pages[1],
new Rectangle(550, 93, 562, 439),
new Point(556, 99), new Point(556, 443))
{
Title = "Джон Смит",
Color = Color.Red,
Width = 3,
StartingStyle = LineEnding.OpenArrow,
EndingStyle = LineEnding.OpenArrow,
Popup = new PopupAnnotation(document.Pages[1], new Rectangle(842, 124, 1021, 266))
};
// Добавить аннотацию на страницу
document.Pages[1].Annotations.Add(lineAnnotation);
document.Save(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
Добавление квадрата или круга
Аннотации Square и Circle отобразят прямоугольник или эллипс на странице. Square и Circle аннотации отображают прямоугольник или эллипс на странице.
Добавление аннотации Circle
Чтобы нарисовать новую круглую или эллиптическую аннотацию, нам нужно создать новый объект CircleAnnotation. Конструктор класса CircleAnnotation
принимает два параметра:
- страницу, на которую будет добавлена аннотация,
- и прямоугольник, который определяет границы аннотации
Также мы можем установить некоторые свойства объекта CircleAnnotation
, такие как название, цвет, внутренний цвет, прозрачность. Эти свойства контролируют внешний вид и поведение аннотации в PDF-просмотрщике. Здесь и далее в Square InteriorColor
- это цвет заливки, а Color
- цвет границы.
Добавление аннотации Square
Рисование прямоугольника происходит так же, как и рисование круга. Рисование прямоугольника такое же, как рисование круга.
var dataDir = "<path-to-file>";
// Загрузить файл PDF
Document document = new Document(System.IO.Path.Combine(dataDir, "appartments.pdf"));
// Создать аннотацию Круг
var circleAnnotation = new CircleAnnotation(document.Pages[1], new Rectangle(270, 160, 483, 383))
{
Title = "John Smith",
Subject = "Круг",
Color = Color.Red,
InteriorColor = Color.MistyRose,
Opacity = 0.5,
Popup = new PopupAnnotation(document.Pages[1], new Rectangle(842, 316, 1021, 459))
};
// Создать аннотацию Квадрат
var squareAnnotation = new SquareAnnotation(document.Pages[1], new Rectangle(67, 317, 261, 459))
{
Title = "John Smith",
Subject = "Прямоугольник",
Color = Color.Blue,
InteriorColor = Color.BlueViolet,
Opacity = 0.25,
Popup = new PopupAnnotation(document.Pages[1], new Rectangle(842, 196, 1021, 338))
};
// Добавить аннотацию на страницу
document.Pages[1].Annotations.Add(circleAnnotation);
document.Pages[1].Annotations.Add(squareAnnotation);
document.Save(System.IO.Path.Combine(dataDir, "appartments_mod.pdf"));
В качестве примера мы увидим следующий результат добавления аннотаций Квадрат и Круг к документу PDF:
Добавление аннотаций Полигон и Полилиния
Инструмент Poly- позволяет создавать фигуры и контуры с произвольным количеством сторон на документе.
Аннотации Полигон представляют собой полигоны на странице. Они могут иметь любое количество вершин, соединенных прямыми линиями. Аннотации Полилиния также похожи на полигоны, единственное отличие в том, что первая и последняя вершины не соединены неявно.
Добавление аннотации Полигон
PolygonAnnotation отвечает за аннотации полигонов. Конструктор класса PolygonAnnotation принимает три параметра:
- страница, на которой будет добавлена аннотация,
- прямоугольник, который определяет границы аннотации,
- и массив точек, определяющих вершины полигона.
Color
и InteriorColor
используются соответственно для цвета границы и цвета заливки.
Добавление аннотации Полилиния
Добавление аннотации полилинии
PolygonAnnotation отвечает за аннотации в виде полигонов. Конструктор класса PolygonAnnotation принимает три параметра:
- страницу, на которую будет добавлена аннотация,
- прямоугольник, который определяет границы аннотации,
- и массив точек, которые определяют вершины полигона.
Вместо PolygonAnnotation
мы не можем заполнить эту форму, поэтому нам не нужно использовать InteriorColor
.
Следующий пример кода показывает, как добавить аннотации Polygon и Polyline в файл PDF:
// Загрузить файл PDF
Document document = new Document(System.IO.Path.Combine(dataDir, "appartments.pdf"));
// Создать аннотацию Polygon
var polygonAnnotation = new PolygonAnnotation(document.Pages[1],
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)})
{
Title = "John Smith",
Color = Color.Blue,
InteriorColor = Color.BlueViolet,
Opacity = 0.25,
Popup = new PopupAnnotation(document.Pages[1], new Rectangle(842, 196, 1021, 338))
};
// Создать аннотацию Polyline
var polylineAnnotation = new PolylineAnnotation(document.Pages[1],
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)
})
{
Title = "John Smith",
Color = Color.Red,
Popup = new PopupAnnotation(document.Pages[1], new Rectangle(842, 196, 1021, 338))
};
// Добавить аннотацию на страницу
document.Pages[1].Annotations.Add(polygonAnnotation);
document.Pages[1].Annotations.Add(polylineAnnotation);
document.Save(System.IO.Path.Combine(dataDir, "appartments_mod.pdf"));
Получение данных
Все аннотации хранятся в коллекции Annotations
. Любая аннотация может указывать свой тип через свойство AnnotationType
. Следовательно, мы можем выполнить запрос LINQ, чтобы отфильтровать нужные аннотации.
Получение аннотаций линий
Пример ниже объясняет, как получить все аннотации линий с первой страницы документа PDF.
// Загрузка файла PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var lineAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Line)
.Cast<LineAnnotation>();
foreach (var la in lineAnnotations)
{
Console.WriteLine($"[{la.Starting.X},{la.Starting.Y}]-[{la.Ending.X},{la.Ending.Y}]");
}
Получение аннотаций окружностей
Пример ниже объясняет, как получить все аннотации полилиний с первой страницы документа PDF.
// Загрузка файла PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var circleAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Line)
.Cast<CircleAnnotation>();
foreach (var ca in circleAnnotations)
{
Console.WriteLine($"[{ca.Rect}]");
}
Получение аннотаций в виде квадратов
Пример ниже объясняет, как получить все аннотации в виде квадратов на первой странице PDF документа.
// Загрузка PDF файла
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var squareAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Square)
.Cast<SquareAnnotation>();
foreach (var sq in squareAnnotations)
{
Console.WriteLine($"[{sq.Rect}]");
}
Получение аннотаций в виде полилиний
Пример ниже объясняет, как получить все аннотации в виде полилиний на первой странице PDF документа.
// Загрузка PDF файла
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var polyAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.PolyLine)
.Cast<PolylineAnnotation>();
foreach (var pa in polyAnnotations)
{
Console.WriteLine($"[{pa.Rect}]");
}
Получение аннотаций в виде полигонов
Пример ниже объясняет, как получить все аннотации-полигоны с первой страницы PDF-документа.
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var polyAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Polygon)
.Cast<PolygonAnnotation>();
foreach (var pa in polyAnnotations)
{
Console.WriteLine($"[{pa.Rect}]");
}
Удаление фигур
Подход к удалению аннотации из PDF довольно прост:
- Выберите аннотации для удаления (создайте некоторую коллекцию)
- Итерируйте по коллекции с помощью цикла foreach и удаляйте каждую аннотацию из коллекции аннотаций с использованием метода Delete.
Удаление аннотации-линии
// Загрузите файл PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var lineAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Line)
.Cast<LineAnnotation>();
foreach (var la in lineAnnotations)
{
document.Pages[1].Annotations.Delete(la);
}
Удаление аннотаций Круг и Квадрат
// Загрузка файла PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var figures = document.Pages[1].Annotations
.Where(a =>
a.AnnotationType == AnnotationType.Circle
|| a.AnnotationType == AnnotationType.Square);
foreach (var fig in figures)
{
document.Pages[1].Annotations.Delete(fig);
}
document.Save(System.IO.Path.Combine(_dataDir, "Appartments_del.pdf"));
Удаление аннотаций Полигон и Полилиния
В следующем примере кода показано, как удалить аннотации Полигон и Полилиния из файла PDF.
// Загрузка файла PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "Appartments_mod.pdf"));
var polyAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.PolyLine
|| a.AnnotationType == AnnotationType.Polygon);
foreach (var pa in polyAnnotations)
{
document.Pages[1].Annotations.Delete(pa);
}
document.Save(System.IO.Path.Combine(_dataDir, "Appartments_del.pdf"));
Как добавить аннотацию чернилами в файл PDF
Аннотация чернилами представляет собой свободный “набросок”, состоящий из одного или нескольких разрозненных путей. При открытии она должна отображать всплывающее окно с текстом связанной заметки.
InkAnnotation представляет собой свободный набросок, состоящий из одного или нескольких разрозненных точек. Пожалуйста, попробуйте использовать следующий фрагмент кода для добавления аннотации чернилами в документ PDF.
// Загрузить файл PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "appartments.pdf"));
Page page = document.Pages[1];
Rectangle arect = new Rectangle(156.574, 521.316, 541.168, 575.703);
IList<Point[]> inkList = new List<Point[]>();
Point[] arrpt = new[]
{
new Point(209.727,542.263),
new Point(209.727,541.94),
new Point(209.727,541.616)
};
inkList.Add(arrpt);
InkAnnotation ia = new InkAnnotation(page, arect, inkList)
{
Title = "John Smith",
Subject = "Pencil",
Color = Color.LightBlue,
CapStyle = CapStyle.Rounded,
Opacity = 0.5
};
Border border = new Border(ia)
{
Width = 25
};
ia.Border = border;
page.Annotations.Add(ia);
// Сохранить выходной файл
document.Save(System.IO.Path.Combine(_dataDir, "appartments_mod.pdf"));
Установка ширины линии InkAnnotation
Ширину InkAnnotation можно изменить с помощью объектов LineInfo и Border.
// Для полных примеров и файлов данных, пожалуйста, перейдите по ссылке https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к каталогу документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
Document doc = new Document();
doc.Pages.Add();
IList<Point[]> inkList = new List<Point[]>();
LineInfo lineInfo = new LineInfo();
lineInfo.VerticeCoordinate = new float[] { 55, 55, 70, 70, 70, 90, 150, 60 };
lineInfo.Visibility = true;
lineInfo.LineColor = System.Drawing.Color.Red;
lineInfo.LineWidth = 2;
int length = lineInfo.VerticeCoordinate.Length / 2;
Aspose.Pdf.Point[] gesture = new Aspose.Pdf.Point[length];
for (int i = 0; i < length; i++)
{
gesture[i] = new Aspose.Pdf.Point(lineInfo.VerticeCoordinate[2 * i], lineInfo.VerticeCoordinate[2 * i + 1]);
}
inkList.Add(gesture);
InkAnnotation a1 = new InkAnnotation(doc.Pages[1], new Aspose.Pdf.Rectangle(100, 100, 300, 300), inkList);
a1.Subject = "Test";
a1.Title = "Title";
a1.Color = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
Border border = new Border(a1);
border.Width = 3;
border.Effect = BorderEffect.Cloudy;
border.Dash = new Dash(1, 1);
border.Style = BorderStyle.Solid;
doc.Pages[1].Annotations.Add(a1);
dataDir = dataDir + "lnkAnnotationLineWidth_out.pdf";
// Сохранить выходной файл
doc.Save(dataDir);
### Удаление аннотации с кругом
Следующий фрагмент кода показывает, как удалить аннотацию с кругом из файла PDF.
```csharp
public static void DeleteCircleAnnotation()
{
// Загрузить файл PDF
Document document = new Document(System.IO.Path.Combine(dataDir, "Appartments_mod.pdf"));
var circleAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Circle)
.Cast<CircleAnnotation>();
foreach (var ca in circleAnnotations)
{
document.Pages[1].Annotations.Delete(ca);
}
document.Save(System.IO.Path.Combine(dataDir, "Appartments_del.pdf"));
}