PDFハイライトアノテーションをC#で使用

テキストマークアップ注釈は、文書のテキストにハイライト、下線、取り消し線、またはギザギザの(「波線」の)下線として表示されます。開かれると、関連するノートのテキストを含むポップアップウィンドウが表示されます。

PDFドキュメント内のテキストマークアップ注釈のプロパティは、PDFビューアコントロールで提供されるプロパティウィンドウを使用して編集できます。テキストマークアップ注釈の色、不透明度、作者、および主題を変更できます。

ハイライト注釈の設定を取得または設定することが可能です。これは、highlightSettingsプロパティを使用して行います。highlightSettingsプロパティは、ハイライト注釈の色、不透明度、作者、主題、変更日、およびロック状態のプロパティを設定するために使用されます。

また、strikethroughSettingsプロパティを使用して、取り消し線注釈の設定を取得または設定することも可能です。strikethroughSettingsプロパティは、取り消し線注釈の色、不透明度、作者、主題、変更日、およびロック状態のプロパティを設定するために使用されます。

次の機能は、underlineSettingsプロパティを使用して、下線注釈の設定を取得または設定する能力です。 次の機能は、underlineSettingsプロパティを使用して下線注釈の設定を取得または設定する機能です。

次のコードスニペットもAspose.PDF.Drawingライブラリで動作します。

テキストマークアップ注釈を追加

PDFドキュメントにテキストマークアップ注釈を追加するには、次の操作を行う必要があります:

  1. PDFファイルをロード - 新しいDocumentオブジェクト。
  2. 注釈を作成する:
    • HighlightAnnotationを設定し、パラメータ(タイトル、色)を設定します。
    • StrikeOutAnnotationを設定し、パラメータ(タイトル、色)を設定します。
    • SquigglyAnnotationを設定し、パラメータ(タイトル、色)を設定します。
    • UnderlineAnnotationを設定し、パラメータ(タイトル、色)を設定します。
  1. その後、すべての注釈をページに追加する必要があります。
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 User",
                    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 User",
                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"));
    }