ベクターグラフィックスの操作

この章では、PDFドキュメント内のベクターグラフィックスと対話するために強力なGraphicsAbsorberクラスの使用方法について探求します。グラフィックを移動、削除、または追加する必要がある場合、このガイドはこれらのタスクを効果的に実行する方法を示します。さあ、始めましょう!

はじめに

ベクターグラフィックスは、多くのPDFドキュメントで重要な要素であり、画像、形状、その他のグラフィカル要素を表現するために使用されます。Aspose.PDFはGraphicsAbsorberクラスを提供し、開発者がこれらのグラフィックスにプログラム的にアクセスし、操作できるようにします。GraphicsAbsorberVisitメソッドを使用することで、指定されたページからベクターグラフィックスを抽出し、移動、削除、または他のページへのコピーなどのさまざまな操作を実行できます。

1. GraphicsAbsorberでグラフィックスを抽出する

ベクターグラフィックスを扱う最初のステップは、PDFドキュメントからそれらを抽出することです。以下は、GraphicsAbsorberクラスを使用してこれを行う方法です:

public static void UsingGraphicsAbsorber()
{
    // ステップ 1: Documentオブジェクトを作成します。
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");

    // ステップ 2: GraphicsAbsorberのインスタンスを作成します。
    var graphicsAbsorber = new GraphicsAbsorber();

    // ドキュメントの最初のページを選択します。
    var page = document.Pages[1];

    // ステップ 3: `Visit`メソッドを使用してページからグラフィックスを抽出します。
    graphicsAbsorber.Visit(page);

    // 抽出された要素についての情報を表示します。
    foreach (var element in graphicsAbsorber.Elements)
    {
        Console.WriteLine($"ページ番号: {element.SourcePage.Number}");
        Console.WriteLine($"位置: ({element.Position.X}, {element.Position.Y})");
        Console.WriteLine($"オペレーターの数: {element.Operators.Count}");
    }
}

説明:

  1. ドキュメントオブジェクトの作成: 新しい Document オブジェクトがターゲットPDFファイルへのパスでインスタンス化されます。
  2. GraphicsAbsorberのインスタンスを作成: このクラスは指定されたページからすべてのグラフィック要素をキャプチャします。
  3. Visitメソッド: Visit メソッドが最初のページで呼び出され、GraphicsAbsorber がベクターグラフィックスを吸収します。
  4. 抽出された要素を通してイテレートする: コードは抽出された各要素をループし、ページ番号、位置、および関与する描画オペレーターの数などの情報を印刷します。

2. グラフィックスの移動

グラフィックスを抽出したら、同じページ上の異なる位置に移動することができます。以下の方法でこれを実現できます:

public static void MoveGraphics()
{
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");
    var graphicsAbsorber = new GraphicsAbsorber();
    var page = document.Pages[1];
    graphicsAbsorber.Visit(page);

    // パフォーマンス向上のため一時的に更新を停止します。
    graphicsAbsorber.SuppressUpdate();

    foreach (var element in graphicsAbsorber.Elements)
    {
        var position = element.Position;
        // XおよびY座標をシフトさせてグラフィックスを移動します。
        element.Position = new Point(position.X + 150, position.Y - 10);
    }

    // 更新を再開し、変更を適用します。
    graphicsAbsorber.ResumeUpdate();
    document.Save("test.pdf");
}

主要ポイント:

  • SuppressUpdate: このメソッドは、複数の変更を行う際にパフォーマンスを向上させるために一時的に更新を中断します。
  • ResumeUpdate: このメソッドは更新を再開し、グラフィックの位置に加えられた変更を適用します。
  • エレメントの位置決め: 各グラフィックの位置は、その XY 座標を変更することによって調整されます。

3. グラフィックの削除

特定のグラフィックをページから削除したい場合があります。Aspose.PDFはこれを達成するために二つの方法を提供します:

方法1: 矩形境界を使用

public static void RemoveGraphicsMethod1()
{
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");
    var graphicsAbsorber = new GraphicsAbsorber();
    var page = document.Pages[1];
    graphicsAbsorber.Visit(page);
    var rectangle = new Rectangle(70, 248, 170, 252);

    graphicsAbsorber.SuppressUpdate();
    foreach (var element in graphicsAbsorber.Elements)
    {
        // グラフィックの位置が矩形内にあるかどうかを確認します。
        if (rectangle.Contains(element.Position))
        {
            element.Remove(); // グラフィック要素を削除します。
        }
    }
    graphicsAbsorber.ResumeUpdate();
    document.Save("test.pdf");
}

方法2:削除された要素のコレクションを使用する

public static void RemoveGraphicsMethod2()
{
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");
    var graphicsAbsorber = new GraphicsAbsorber();
    var page = document.Pages[1];
    var rectangle = new Rectangle(70, 248, 170, 252);

    graphicsAbsorber.Visit(page);
    var removedElementsCollection = new GraphicElementCollection();
    foreach (var item in graphicsAbsorber.Elements.Where(el => rectangle.Contains(el.Position)))
    {
        removedElementsCollection.Add(item);
    }

    page.Contents.SuppressUpdate();
    page.DeleteGraphics(removedElementsCollection);
    page.Contents.ResumeUpdate();
    document.Save("test.pdf");
}

説明:

  • 矩形の境界:削除するグラフィックを指定する矩形エリアを定義します。
  • 更新の抑制と再開:中間レンダリングなしで効率的な削除を保証します。

4. 別のページへのグラフィックの追加

一ページから吸収されたグラフィックは、同じドキュメント内の別のページに追加することができます。 1ページから吸収されたグラフィックスを同じドキュメントの別のページに追加できます。

方法1:グラフィックスを個別に追加する

public static void AddToAnotherPageMethod1()
{
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");
    var graphicsAbsorber = new GraphicsAbsorber();
    var page1 = document.Pages[1];
    var page2 = document.Pages[2];

    graphicsAbsorber.Visit(page1);
    page2.Contents.SuppressUpdate();
    foreach (var element in graphicsAbsorber.Elements)
    {
        element.AddOnPage(page2); // 各グラフィック要素を2ページ目に追加します。
    }
    page2.Contents.ResumeUpdate();
    document.Save("test.pdf");
}

方法2:グラフィックスをコレクションとして追加する

public static void AddToAnotherPageMethod2()
{
    var document = new Document(@"C:\Samples\Sample-Document-01.pdf");
    var graphicsAbsorber = new GraphicsAbsorber();
    var page1 = document.Pages[1];
    var page2 = document.Pages[2];

    graphicsAbsorber.Visit(page1);
    page2.Contents.SuppressUpdate();
    page2.AddGraphics(graphicsAbsorber.Elements); // 一度にすべてのグラフィックスを追加します。
    page2.Contents.ResumeUpdate();
    document.Save("test.pdf");
}

主要ポイント:

  • SuppressUpdate と ResumeUpdate: これらのメソッドは、一括変更を行う間、パフォーマンスを維持するのに役立ちます。
  • AddOnPage 対 AddGraphics: AddOnPage は個別の追加に使用し、AddGraphics は一括追加に使用します。

結論

この章では、GraphicsAbsorber クラスを使用して PDF ドキュメント内のベクターグラフィックスを抽出、移動、削除、追加する方法について探求しました。これらの技術をマスターすることで、PDF の視覚的プレゼンテーションを大幅に向上させ、ダイナミックで視覚的に魅力的なドキュメントを作成できます。

コード例を実験して、特定のユースケースに合わせて適応させてみてください。ハッピーコーディング!