Anotação de Destaque em PDF usando C#
As anotações de marcação de texto devem aparecer como destaques, sublinhados, riscados ou sublinhados irregulares (“ondulados”) no texto de um documento. Ao serem abertas, devem exibir uma janela pop-up contendo o texto da nota associada.
As propriedades das anotações de marcação de texto no documento PDF podem ser editadas usando a janela de propriedades fornecida no controle de visualização de PDF. A cor, opacidade, autor e assunto da anotação de marcação de texto podem ser modificados.
É possível obter ou definir as configurações das anotações de destaque usando a propriedade highlightSettings. A propriedade highlightSettings é usada para definir a cor, opacidade, autor, assunto, data de modificação e propriedades isLocked das anotações de destaque.
Também é possível obter ou definir as configurações das anotações de riscado usando a propriedade strikethroughSettings. A propriedade strikethroughSettings é usada para definir a cor, opacidade, autor, assunto, data de modificação e propriedades isLocked das anotações de riscado.
A próxima característica é a capacidade de obter ou definir as configurações das anotações de sublinhado usando a propriedade underlineSettings. A próxima funcionalidade é a capacidade de obter ou definir as configurações das anotações sublinhadas usando a propriedade underlineSettings.
O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.
Adicionar Anotação de Marcação de Texto
Para adicionar uma Anotação de Marcação de Texto ao documento PDF, precisamos realizar as seguintes ações:
- Carregar o arquivo PDF - novo objeto Document.
- Criar anotações:
- HighlightAnnotation e definir parâmetros (título, cor).
- StrikeOutAnnotation e definir parâmetros (título, cor).
- SquigglyAnnotation e definir parâmetros (título, cor).
- UnderlineAnnotation e definir parâmetros (título, cor).
- UnderlineAnnotation e defina parâmetros (título, cor).
- Depois, devemos adicionar todas as anotações à página.
using Aspose.Pdf.Annotations;
using Aspose.Pdf.Text;
using System;
using System.Linq;
namespace Aspose.Pdf.Examples.Advanced
{
class ExampleTextMarkupAnnotation
{
// O caminho para o diretório de documentos.
private const string _dataDir = "..\\..\\..\\..\\Samples";
public static void AddTextMarkupAnnotation()
{
try
{
// Carregar o arquivo 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]);
//Criar anotações
HighlightAnnotation highlightAnnotation = new HighlightAnnotation(document.Pages[1],
tfa.TextFragments[1].Rectangle )
{
Title = "Usuário Aspose",
Color = Color.LightGreen
};
StrikeOutAnnotation strikeOutAnnotation = new StrikeOutAnnotation(
document.Pages[1],
tfa.TextFragments[2].Rectangle)
{
Title = "Usuário Aspose",
Color = Color.Blue
};
SquigglyAnnotation squigglyAnnotation = new SquigglyAnnotation(document.Pages[1],
tfa.TextFragments[3].Rectangle)
{
Title = "Usuário Aspose",
Color = Color.Red
};
UnderlineAnnotation underlineAnnotation = new UnderlineAnnotation(document.Pages[1],
tfa.TextFragments[4].Rectangle)
{
Title = "Usuário Aspose",
Color = Color.Violet
};
// Adicionar anotação à página
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);
}
}
Se você quiser destacar um fragmento de várias linhas, você deve usar o exemplo avançado:
/// <summary>
/// Exemplo avançado para quando você quer destacar um fragmento de várias linhas
/// </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 = "Usuário 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 = "Usuário Aspose",
Color = color,
Modified = DateTime.Now,
QuadPoints = quadPoints
};
}
/// <summary>
/// Como obter um Texto Destacado
/// </summary>
public static void GetHighlightedText()
{
// Carregar o arquivo 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()}]");
}
}
Obter Anotação de Marcação de Texto
Por favor, tente usar o seguinte trecho de código para obter Anotação de Marcação de Texto de um documento PDF.
public static void GetTextMarkupAnnotation()
{
// Carregar o arquivo 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}]");
}
}
Excluir Anotação de Marcação de Texto
O seguinte trecho de código mostra como Excluir Anotação de Marcação de Texto de um arquivo PDF.
public static void DeleteTextMarkupAnnotation()
{
// Carregar o arquivo 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"));
}