Anotación de resaltado en PDF usando C#

Las anotaciones de marcado de texto aparecerán como resaltados, subrayados, tachados o subrayados irregulares (“ondulados”) en el texto de un documento. Al abrirse, mostrarán una ventana emergente que contiene el texto de la nota asociada.

Las propiedades de las anotaciones de marcado de texto en el documento PDF se pueden editar usando la ventana de propiedades proporcionada en el control de visualización de PDF. Se puede modificar el color, la opacidad, el autor y el tema de la anotación de marcado de texto.

Es posible obtener o establecer los ajustes de las anotaciones resaltadas usando la propiedad highlightSettings. La propiedad highlightSettings se utiliza para establecer el color, la opacidad, el autor, el tema, la fecha de modificación y las propiedades isLocked de las anotaciones resaltadas.

También es posible obtener o establecer los ajustes de las anotaciones tachadas usando la propiedad strikethroughSettings. La propiedad strikethroughSettings se utiliza para establecer el color, la opacidad, el autor, el tema, la fecha de modificación y las propiedades isLocked de las anotaciones tachadas.

La siguiente característica es la capacidad de obtener o establecer los ajustes de las anotaciones subrayadas usando la propiedad underlineSettings. La siguiente característica es la capacidad de obtener o establecer los ajustes de las anotaciones subrayadas usando la propiedad underlineSettings.

El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.

Añadir Anotación de Marcado de Texto

Para añadir una Anotación de Marcado de Texto al documento PDF, necesitamos realizar las siguientes acciones:

  1. Cargar el archivo PDF - nuevo objeto Document.
  2. Crear anotaciones:
  1. Después debemos agregar todas las anotaciones a la página.
using Aspose.Pdf.Annotations;
using Aspose.Pdf.Text;
using System;
using System.Linq;

namespace Aspose.Pdf.Examples.Advanced
{
    class ExampleTextMarkupAnnotation
    {
        // La ruta al directorio de documentos.
        private const string _dataDir = "..\\..\\..\\..\\Samples";

        public static void AddTextMarkupAnnotation()
        {
            try
            {
                // Cargar el archivo 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]);

                //Crear anotaciones
                HighlightAnnotation highlightAnnotation = new HighlightAnnotation(document.Pages[1],
                   tfa.TextFragments[1].Rectangle )
                {
                    Title = "Usuario de Aspose",
                    Color = Color.LightGreen
                };

                StrikeOutAnnotation strikeOutAnnotation = new StrikeOutAnnotation(
                   document.Pages[1],
                   tfa.TextFragments[2].Rectangle)
                {
                    Title = "Usuario de Aspose",
                    Color = Color.Blue
                };
                SquigglyAnnotation squigglyAnnotation = new SquigglyAnnotation(document.Pages[1],
                    tfa.TextFragments[3].Rectangle)
                {
                    Title = "Usuario de Aspose",
                    Color = Color.Red
                };
                UnderlineAnnotation underlineAnnotation = new UnderlineAnnotation(document.Pages[1],
                    tfa.TextFragments[4].Rectangle)
                {
                    Title = "Usuario de Aspose",
                    Color = Color.Violet
                };
                // Añadir anotación a la 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);
            }
        }

Si desea resaltar un fragmento de varias líneas, debe usar el siguiente ejemplo avanzado:

        /// <summary>
        /// Ejemplo avanzado para resaltar un fragmento de múltiples líneas
        /// </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 = "Usuario de 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 = "Usuario de Aspose",
                Color = color,
                Modified = DateTime.Now,
                QuadPoints = quadPoints
            };
        }

        /// <summary>
        /// Cómo obtener un texto resaltado
        /// </summary>
        public static void GetHighlightedText()
        {
            // Cargar el archivo 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()}]");
            }
        }

Obtener Anotación de Marcado de Texto

Por favor, intente usar el siguiente fragmento de código para obtener una Anotación de Marcado de Texto de un documento PDF.

    public static void GetTextMarkupAnnotation()
    {
        // Cargar el archivo 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}]");
            }
    }

Eliminar Anotación de Marcado de Texto

El siguiente fragmento de código muestra cómo Eliminar una Anotación de Marcado de Texto de un archivo PDF.

    public static void DeleteTextMarkupAnnotation()
    {
        // Cargar el archivo 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"));
    }