ベクターグラフィックスの操作
この章では、PDFドキュメント内のベクターグラフィックスと対話するために強力なGraphicsAbsorber
クラスの使用方法について探求します。グラフィックを移動、削除、または追加する必要がある場合、このガイドはこれらのタスクを効果的に実行する方法を示します。さあ、始めましょう!
はじめに
ベクターグラフィックスは、多くのPDFドキュメントで重要な要素であり、画像、形状、その他のグラフィカル要素を表現するために使用されます。Aspose.PDFはGraphicsAbsorber
クラスを提供し、開発者がこれらのグラフィックスにプログラム的にアクセスし、操作できるようにします。GraphicsAbsorber
のVisit
メソッドを使用することで、指定されたページからベクターグラフィックスを抽出し、移動、削除、または他のページへのコピーなどのさまざまな操作を実行できます。
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}");
}
}
説明:
- ドキュメントオブジェクトの作成: 新しい
Document
オブジェクトがターゲットPDFファイルへのパスでインスタンス化されます。 GraphicsAbsorber
のインスタンスを作成: このクラスは指定されたページからすべてのグラフィック要素をキャプチャします。- Visitメソッド:
Visit
メソッドが最初のページで呼び出され、GraphicsAbsorber
がベクターグラフィックスを吸収します。 - 抽出された要素を通してイテレートする: コードは抽出された各要素をループし、ページ番号、位置、および関与する描画オペレーターの数などの情報を印刷します。
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: このメソッドは更新を再開し、グラフィックの位置に加えられた変更を適用します。
- エレメントの位置決め: 各グラフィックの位置は、その
X
とY
座標を変更することによって調整されます。
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 の視覚的プレゼンテーションを大幅に向上させ、ダイナミックで視覚的に魅力的なドキュメントを作成できます。
コード例を実験して、特定のユースケースに合わせて適応させてみてください。ハッピーコーディング!