コンテンツ操作
コンテンツ操作
PDF ページはコンテンツ ストリームに格納されたオペレータのシーケンスによってレンダリングされます。Aspose.PDF FOSS for .NET は、各 Page 上の OperatorCollection を通じてこれらのオペレータを公開し、プログラムで新しいコンテンツを構築するための ContentStreamBuilder を提供します。
コンテンツストリームオペレータの読み取り
すべての Page には、OperatorCollection を返す Contents プロパティがあります。これを反復処理して各オペレータを検査します。
using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];
foreach (var op in page.Contents)
{
Console.WriteLine(op.ToString());
}コンテンツ ストリームの構築
ContentStreamBuilder は、グラフィックス状態管理、パス構築、テキスト出力、カラー設定を含むコンテンツ ストリーム オペレータ シーケンスを構築するための流暢な API を提供します。
var builder = new ContentStreamBuilder();
builder.SaveState();
builder.SetFillColor(1.0, 0.0, 0.0); // Red fill
builder.SetMatrix(1, 0, 0, 1, 72, 700); // Translate
// ... add drawing or text operators
builder.RestoreState();グラフィックス状態
GraphicsState は、演算子が実行される際に現在の変換行列、テキスト状態、カラー値を追跡します。主な操作は次のとおりです:
var gs = new GraphicsState();
gs.Save();
gs.ConcatMatrix(new Matrix(1, 0, 0, 1, 100, 200));
gs.Restore();カラー演算子
SetColor と SetColorStroke はそれぞれ塗りと線の色を設定します。RGB、CMYK、またはグレースケールの成分を受け付けます。
// RGB fill color (blue)
var fill = new SetColor(0, 0, 1);
// RGB stroke color (red)
var stroke = new SetColorStroke(1, 0, 0);テキスト演算子
ShowText は、グラフィックス状態から取得した現在のフォントとサイズを使用して、現在のテキスト位置にテキスト文字列を描画します。
var textOp = new ShowText("Hello, PDF!");SetTextMatrix は、テキスト空間用の変換行列を定義することでテキストの位置を決めます。
拡張グラフィックス状態
ExtGState は、塗りと線のアルファ(透明度)やブレンドモードなどの高度な描画プロパティを制御します。
ヒントとベストプラクティス
- グラフィックス状態スタックが破損しないよう、常に
SaveState/RestoreState(またはq/Q演算子)をペアにしてください。 - 演算子オブジェクトを手動で構築するのではなく、新しいコンテンツには
ContentStreamBuilderを使用してください。 - 変更する前に
OperatorCollectionを読み取り専用で検査してください — 予期しない演算子シーケンスがレンダリングの問題を引き起こす可能性があります。 - カラー演算子は現在のカラースペース(RGB、CMYK、またはグレースケール)と一致しなければなりません。
- パターンおよび ICC ベースのカラースペースには
SetAdvancedColorを使用してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
| 演算子を追加した後、テキストが表示されません | テキスト状態でフォントが設定されていません | ShowText の前に SetFont 演算子を追加してください |
| 色が正しく表示されません | カラースペースの不一致 (RGB と CMYK) | アクティブなカラースペースに一致する演算子を使用してください |
| グラフィックス状態スタックがオーバーフローしました | 不均衡な Save / Restore ペア | すべての SaveState に対応する RestoreState があることを確認してください |
| コンテンツが誤った位置に表示されます | 行列変換が欠落しているか、正しくありません | SetMatrix または ConcatMatrix の値を確認してください |
FAQ
PDF コンテンツストリームとは何ですか?
コンテンツストリームは、ページの描画方法を記述するオペレーターのシーケンスです — パスの描画、テキストの配置、カラーの設定、グラフィックス状態の管理を行います。
既存のページに新しいコンテンツを追加できますか?
はい。page.Contents にアクセスして新しいオペレーターを追加するか、ContentStreamBuilder を使用してシーケンスを構築し、末尾に追加してください。
テキストを透明にするにはどうすればよいですか?
ExtGState を使用して、塗りつぶしアルファ(ca)を 0(完全に透明)から 1(完全に不透明)までの値に設定します。
API Reference 概要
| クラス / メソッド | 説明 |
|---|---|
OperatorCollection | ページ上のコンテンツストリーム演算子のシーケンス |
ContentStreamBuilder | 演算子シーケンスを構築するための流暢なビルダー |
ContentStreamBuilder.SaveState | 現在のグラフィックス状態をスタックにプッシュする |
ContentStreamBuilder.RestoreState | スタックからグラフィックス状態をポップする |
ContentStreamBuilder.SetFillColor | 現在のカラースペースで塗りつぶし色を設定します |
ContentStreamBuilder.SetMatrix | 座標変換を適用する |
GraphicsState | 変換行列、色、テキスト状態を追跡する |
SetColor | 非ストローク(塗り)カラーを設定する演算子 |
SetColorStroke | ストロークカラーを設定するオペレーター |
SetAdvancedColor | パターン / ICCベースのカラースペース用オペレーター |
ShowText | テキスト文字列をレンダリングするオペレーター |
SetTextMatrix | 行列でテキストの位置を指定するオペレーター |
ExtGState | 拡張グラフィックス状態(アルファ、ブレンドモード) |