Аннотация выделения в PDF с использованием C#
Аннотации текстового разметки должны отображаться как выделения, подчеркивания, зачеркивания или неровные («волнистые») подчеркивания в тексте документа. При открытии они должны отображать всплывающее окно, содержащее текст связанной заметки.
Свойства аннотаций текстовой разметки в документе PDF можно редактировать, используя окно свойств, предоставляемое в элементе управления просмотра PDF. Цвет, прозрачность, автор и тема аннотации текстовой разметки могут быть изменены.
Возможно получить или установить настройки аннотаций выделения, используя свойство highlightSettings. Свойство highlightSettings используется для установки цвета, прозрачности, автора, темы, даты изменения и свойства isLocked аннотаций выделения.
Также возможно получить или установить настройки аннотаций зачеркивания, используя свойство strikethroughSettings. Свойство strikethroughSettings используется для установки цвета, прозрачности, автора, темы, даты изменения и свойства isLocked аннотаций зачеркивания.
Следующая функция - возможность получить или установить настройки аннотаций подчеркивания, используя свойство underlineSettings. Следующая функция - это возможность получения или установки настроек подчеркивания аннотаций с использованием свойства underlineSettings.
Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.
Добавление аннотации текстового выделения
Для добавления аннотации текстового выделения в документ PDF необходимо выполнить следующие действия:
- Загрузить файл PDF - новый объект Document.
- Создать аннотации:
- HighlightAnnotation и установить параметры (название, цвет).
- StrikeOutAnnotation и установить параметры (название, цвет).
- SquigglyAnnotation и установить параметры (название, цвет).
- UnderlineAnnotation и установить параметры (название, цвет).
- UnderlineAnnotation и установите параметры (название, цвет).
- После чего мы должны добавить все аннотации на страницу.
using Aspose.Pdf.Annotations;
using Aspose.Pdf.Text;
using System;
using System.Linq;
namespace Aspose.Pdf.Examples.Advanced
{
class ExampleTextMarkupAnnotation
{
// Путь к директории с документами.
private const string _dataDir = "..\\..\\..\\..\\Samples";
public static void AddTextMarkupAnnotation()
{
try
{
// Загрузить PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "sample.pdf"));
var tfa = new Aspose.Pdf.Text.TextFragmentAbsorber("PDF");
tfa.Visit(document.Pages[1]);
//Создать аннотации
HighlightAnnotation highlightAnnotation = new HighlightAnnotation(document.Pages[1],
tfa.TextFragments[1].Rectangle )
{
Title = "Пользователь Aspose",
Color = Color.LightGreen
};
StrikeOutAnnotation strikeOutAnnotation = new StrikeOutAnnotation(
document.Pages[1],
tfa.TextFragments[2].Rectangle)
{
Title = "Пользователь Aspose",
Color = Color.Blue
};
SquigglyAnnotation squigglyAnnotation = new SquigglyAnnotation(document.Pages[1],
tfa.TextFragments[3].Rectangle)
{
Title = "Пользователь Aspose",
Color = Color.Red
};
UnderlineAnnotation underlineAnnotation = new UnderlineAnnotation(document.Pages[1],
tfa.TextFragments[4].Rectangle)
{
Title = "Пользователь Aspose",
Color = Color.Violet
};
// Добавить аннотации на страницу
document.Pages[1].Annotations.Add(highlightAnnotation);
document.Pages[1].Annotations.Add(squigglyAnnotation);
document.Pages[1].Annotations.Add(strikeOutAnnotation);
document.Pages[1].Annotations.Add(underlineAnnotation);
document.Save(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Если вы хотите выделить фрагмент многострочного текста, вы должны использовать продвинутый пример:
/// <summary>
/// Продвинутый пример для выделения многострочного фрагмента
/// </summary>
public static void AddHighlightAnnotationAdvanced()
{
var document = new Document(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
var page = document.Pages[1];
var tfa = new TextFragmentAbsorber(@"Adobe\W+Acrobat\W+Reader", new TextSearchOptions(true));
tfa.Visit(page);
foreach (var textFragment in tfa.TextFragments)
{
var highlightAnnotation = HighLightTextFragment(page, textFragment, Color.Yellow);
page.Annotations.Add(highlightAnnotation);
}
document.Save(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
}
private static HighlightAnnotation HighLightTextFragment(Aspose.Pdf.Page page,
TextFragment textFragment, Color color)
{
if (textFragment.Segments.Count == 1)
return new HighlightAnnotation(page, textFragment.Segments[1].Rectangle)
{
Title = "Пользователь Aspose",
Color = color,
Modified = DateTime.Now,
QuadPoints = new Point[]
{
new Point(textFragment.Segments[1].Rectangle.LLX, textFragment.Segments[1].Rectangle.URY),
new Point(textFragment.Segments[1].Rectangle.URX, textFragment.Segments[1].Rectangle.URY),
new Point(textFragment.Segments[1].Rectangle.LLX, textFragment.Segments[1].Rectangle.LLY),
new Point(textFragment.Segments[1].Rectangle.URX, textFragment.Segments[1].Rectangle.LLY)
}
};
var offset = 0;
var quadPoints = new Point[textFragment.Segments.Count * 4];
foreach (var segment in textFragment.Segments)
{
quadPoints[offset + 0] = new Point(segment.Rectangle.LLX, segment.Rectangle.URY);
quadPoints[offset + 1] = new Point(segment.Rectangle.URX, segment.Rectangle.URY);
quadPoints[offset + 2] = new Point(segment.Rectangle.LLX, segment.Rectangle.LLY);
quadPoints[offset + 3] = new Point(segment.Rectangle.URX, segment.Rectangle.LLY);
offset += 4;
}
var llx = quadPoints.Min(pt => pt.X);
var lly = quadPoints.Min(pt => pt.Y);
var urx = quadPoints.Max(pt => pt.X);
var ury = quadPoints.Max(pt => pt.Y);
return new HighlightAnnotation(page, new Rectangle(llx, lly, urx, ury))
{
Title = "Пользователь Aspose",
Color = color,
Modified = DateTime.Now,
QuadPoints = quadPoints
};
}
/// <summary>
/// Как получить выделенный текст
/// </summary>
public static void GetHighlightedText()
{
// Загрузите PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
var highlightAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Highlight)
.Cast<HighlightAnnotation>();
foreach (var ta in highlightAnnotations)
{
Console.WriteLine($"[{ta.GetMarkedText()}]");
}
}
Получить аннотацию текстовой разметки
Пожалуйста, попробуйте использовать следующий фрагмент кода для получения аннотации текстовой разметки из PDF документа.
public static void GetTextMarkupAnnotation()
{
// Загрузите PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
var textMarkupAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Highlight
|| a.AnnotationType == AnnotationType.Squiggly)
.Cast<TextMarkupAnnotation>();
foreach (var ta in textMarkupAnnotations)
{
Console.WriteLine($"[{ta.AnnotationType} {ta.Rect}]");
}
}
Удалить аннотацию текстовой разметки
Следующий фрагмент кода показывает, как удалить аннотацию текстовой разметки из PDF файла.
public static void DeleteTextMarkupAnnotation()
{
// Загрузите PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "sample_mod.pdf"));
var textMarkupAnnotations = document.Pages[1].Annotations
.Where(a => a.AnnotationType == AnnotationType.Highlight
||a.AnnotationType == AnnotationType.Squiggly)
.Cast<TextMarkupAnnotation>();
foreach (var ta in textMarkupAnnotations)
{
document.Pages[1].Annotations.Delete(ta);
}
document.Save(System.IO.Path.Combine(_dataDir, "sample_del.pdf"));
}