Annotation de surbrillance PDF en utilisant C#

Les annotations de balisage de texte apparaîtront comme des surlignages, des soulignements, des barrés ou des soulignements irréguliers (« ondulés ») dans le texte d’un document. Lorsqu’elles sont ouvertes, elles afficheront une fenêtre contextuelle contenant le texte de la note associée.

Les propriétés des annotations de balisage de texte dans le document PDF peuvent être modifiées en utilisant la fenêtre des propriétés fournie dans le contrôle de visualisation PDF. La couleur, l’opacité, l’auteur et le sujet de l’annotation de balisage de texte peuvent être modifiés.

Il est possible d’obtenir ou de définir les paramètres des annotations de surlignage à l’aide de la propriété highlightSettings. La propriété highlightSettings est utilisée pour définir la couleur, l’opacité, l’auteur, le sujet, la date de modification et les propriétés isLocked des annotations de surlignage.

Il est également possible d’obtenir ou de définir les paramètres des annotations de barré à l’aide de la propriété strikethroughSettings. La propriété strikethroughSettings est utilisée pour définir la couleur, l’opacité, l’auteur, le sujet, la date de modification et les propriétés isLocked des annotations de barré.

La prochaine fonctionnalité est la possibilité d’obtenir ou de définir les paramètres des annotations de soulignement à l’aide de la propriété underlineSettings. La prochaine fonctionnalité est la capacité d’obtenir ou de définir les paramètres des annotations de soulignement en utilisant la propriété underlineSettings.

Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.

Ajouter une annotation de balisage de texte

Pour ajouter une annotation de balisage de texte au document PDF, nous devons effectuer les actions suivantes :

  1. Charger le fichier PDF - nouvel objet Document.
  2. Créer des annotations :
  1. Après, nous devrions ajouter toutes les annotations à la page.
using Aspose.Pdf.Annotations;
using Aspose.Pdf.Text;
using System;
using System.Linq;

namespace Aspose.Pdf.Examples.Advanced
{
    class ExampleTextMarkupAnnotation
    {
        // Le chemin vers le répertoire des documents.
        private const string _dataDir = "..\\..\\..\\..\\Samples";

        public static void AddTextMarkupAnnotation()
        {
            try
            {
                // Charger le fichier 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]);

                // Créer des annotations
                HighlightAnnotation highlightAnnotation = new HighlightAnnotation(document.Pages[1],
                   tfa.TextFragments[1].Rectangle )
                {
                    Title = "Utilisateur Aspose",
                    Color = Color.LightGreen
                };

                StrikeOutAnnotation strikeOutAnnotation = new StrikeOutAnnotation(
                   document.Pages[1],
                   tfa.TextFragments[2].Rectangle)
                {
                    Title = "Utilisateur Aspose",
                    Color = Color.Blue
                };
                SquigglyAnnotation squigglyAnnotation = new SquigglyAnnotation(document.Pages[1],
                    tfa.TextFragments[3].Rectangle)
                {
                    Title = "Utilisateur Aspose",
                    Color = Color.Red
                };
                UnderlineAnnotation underlineAnnotation = new UnderlineAnnotation(document.Pages[1],
                    tfa.TextFragments[4].Rectangle)
                {
                    Title = "Utilisateur Aspose",
                    Color = Color.Violet
                };
                // Ajouter l'annotation à la page
                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 vous souhaitez mettre en évidence un fragment sur plusieurs lignes, vous devriez utiliser l’exemple avancé :

        /// <summary>
        /// Exemple avancé si vous souhaitez mettre en évidence un fragment sur plusieurs lignes
        /// </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 = "Utilisateur 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 = "Utilisateur Aspose",
                Color = color,
                Modified = DateTime.Now,
                QuadPoints = quadPoints
            };
        }

        /// <summary>
        /// Comment obtenir un texte en surbrillance
        /// </summary>
        public static void GetHighlightedText()
        {
            // Charger le fichier 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()}]");
            }
        }

Obtenir l’annotation de balisage de texte

Veuillez essayer d’utiliser le code suivant pour obtenir l’annotation de balisage de texte d’un document PDF.

    public static void GetTextMarkupAnnotation()
    {
        // Charger le fichier 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}]");
            }
    }

Supprimer l’annotation de balisage de texte

Le code suivant montre comment supprimer l’annotation de balisage de texte d’un fichier PDF.

    public static void DeleteTextMarkupAnnotation()
    {
        // Charger le fichier 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"));
    }