DioDocs for PDF
プリミティブおよび高レベルのPDFオブジェクト

PDF ドキュメントは、プリミティブと高レベルのPDFオブジェクトで構成されています。一般に、PDF ドキュメントには、 PDF 仕様で定義されている次の 9 つのプリミティブオブジェクトが含まれており、これらのリンクされたプリミティブオブジェクトはグラフとして解釈できます。

オブジェクトモデル内のすべての高レベルオブジェクト (Page、AnnotationBase、Action など) は、プリミティブオブジェクトを囲むラッパとして実装されます。ラッパーには、基になるプリミティブタイプ (PdfDict、PdfArray、PdfDictObject など) への参照が含まれます。また、基になるオブジェクトにアクセスして操作するためのメソッドとプロパティが提供されます。PdfWrapperBase は、すべての高レベルオブジェクトのルートクラスです。PdfWrapperBaseには、IPdfObject によって定義される基になるプリミティブ オブジェクトへの参照が含まれます。

DioDocs for PDF を使用すると、GrapeCity.Documents.Pdf.Spec 名前空間内に次のインターフェイスとクラス、およびこの名前空間に含まれるメソッドとプロパティを使用して、PDF ドキュメント内に DocumentInfo や PDF 辞書などの高レベルのエンティティを作成できるプリミティブオブジェクトを直接使用できます。

メモ: 以下で説明するすべてのインターフェース/クラスとそのメンバは、上級ユーザーのみが使用できます。このドキュメントの読者は、PDF 仕様、直接および間接PDF オブジェクト、および PDF ファイルの構成方法をについての基本的な概念を理解しておく必要があります。
インターフェース/クラス 説明
IPdfObject GcPdfDocument 内のすべての PDF オブジェクトによってサポートされるインタフェースです。Indirect プロパティと ObjID プロパティを使用して、間接 PDF オブジェクトと PDF オブジェクトの ID を識別できます。
IPdfArray PdfArrayタイプ、PdfArrayObjectタイプ、および PdfArrayWrapperタイプで実装される共通のインターフェイスです。
IPdfArrayExt IPdfArray インタフェースの拡張メソッドが含まれます。
IPdfDict PdfDictタイプ、PdfDictObjectタイプ、および PdfDictWrapperタイプで実装される共通のインタフェースです。
IPdfDictExt IPdfDict インタフェースの拡張メソッドが含まれます。
IPdfName PdfName タイプとPdfNameObjectタイプで実装される共通のインタフェースです。
IPdfNameExt IPdfNameインタフェースの拡張メソッドが含まれます。
IPdfNumber PdfNumber とPdfNumberObjectで実装されるインタフェースです。
IPdfNumberExt IPdfNumberインタフェースの拡張メソッドが含まれます。
IPdfRef PdfRef とPdfRefObjectで実装されるインタフェースです。
IPdfRefExt IPdfRefインタフェースの拡張メソッドが含まれます。
IPdfString PdfString とPdfStringObjectで実装される共通のインタフェースです。
IPdfStringExt IPdfStringインタフェースの拡張メソッドが含まれます。
IPdfBool PdfBool とPdfBoolObjectで実装される共通のインタフェースです。
IPdfBoolExt IPdfBoolインタフェースの拡張メソッドが含まれます。
IPdfNull PdfNull とPdfNullObjectで実装される共通のインタフェースです。
IPdfNullExt IPdfNullインタフェースの拡張メソッドが含まれます。
PdfArray PDF 配列のオブジェクトを表します。
PdfArrayObject PDF 配列の間接オブジェクトを表します。
PdfArrayWrapper PDF 配列のラッパー オブジェクトを表します。
PdfDict PDF 辞書のオブジェクトを表します。
PdfDictObject PDF 辞書の間接オブジェクトを表します。
PdfDictWrapper PDF辞書のラッパー オブジェクトを表します。
PdfName PDF名のオブジェクトを表します。このクラスは GetHashCode() メソッドと Equals(object) メソッドをオーバーライドし、等価演算子と不等号演算子を定義します。このクラスは不変です。
PdfNameObject PDF名の間接オブジェクトを表します。
PdfNumber PDF数値の直接オブジェクトを表します。このクラスは GetHashCode() メソッドと Equals(object) メソッドをオーバーライドし、等価演算子と不等号演算子を定義します。このクラスは不変です。
PdfNumberObject PDF数値の間接オブジェクトを表します。
PdfStreamObjectBase PDF ストリームを表します。すべてのストリームは間接オブジェクトである必要があります。
PdfRef PDF参照の直接オブジェクトを表します。このクラスは、GetHashCode() メソッドと Equals(object) メソッドをオーバーライドします。このクラスは不変です。
PdfRefObject PDF参照の間接オブジェクトを表します。
PdfString PDF文字列の直接 オブジェクトを表します。このクラスは GetHashCode() メソッドと Equals(object) メソッドをオーバーライドし、等価演算子と不等号演算子を定義します。このクラスは不変です。
PdfStringObject PDF文字列の間接オブジェクトを表します。
PdfBool PDF ブールの直接オブジェクトを表します。コードからこのクラスのインスタンスを作成できません。2 つの事前定義インスタンスPdfBool.TrueとPdfBool.Falseです。等価演算子と不等号演算子を定義するGetHashCode()とEquals(object)をオーバーライドします。
PdfBoolObject PDF ブールの間接オブジェクトを表します。
PdfNull PDF null のオブジェクトを表します。コードからこのクラスのインスタンスを作成することはできません。代わりに、事前定義された PdfNull.Instance インスタンスを使用します。等価演算子と不等号演算子を定義する GetHashCode() と Equals(object) をオーバーライドします。このクラスは不変です。
PdfNullObject PDF nullの間接オブジェクトを表します。

PDF 仕様では、この辞書に存在できるプロパティ (Creator、Author など)が定義されています。ただし、PDF のプロデューサは、PDF ファイルでよく見られる SourceModified プロパティなどの任意のカスタムプロパティを追加することができます。このようなカスタム要素にアクセス (読み取り、書き込み、または編集) するには、GrapeCity.Documents.Pdf.Spec 名前空間を使用します。

PDF ファイル内のほとんどの高レベル のオブジェクトは PDF 辞書であるため、DsPdで対応するオブジェクトが PdfDictWrapper クラスから派生します。PdfDictWrapper クラスは、 PdfWrapperBase から派生し、基になるオブジェクトとしてIPdfDict を使用します。PDF 辞書に関連付けられた PDFストリームからデータを取得するには、PdfWrapperBase クラスの GetPdfStreamメソッド、GetPdfStreamInfoメソッド、および GetPdfStreamData メソッドを使用します。
各高レベル PDF オブジェクト(そのタイプに応じて) は、プリミティブインターフェースの 1 つを実装するため、GrapeCity.Documents.Pdf が提供する拡張メソッドを使用できるようになります

Refer to the following example code to get image properties from a PDF document:

次のサンプルコードは、PDF ドキュメントから画像プロパティを取得する方法を示しています。

C#
コードのコピー
// GcPdfDocumentを初期化します。
GcPdfDocument doc = new GcPdfDocument();
                
// PDFドキュメントを読み込みます。
doc.Load(fs);

// PDF ドキュメントから画像を取得します。
var imgs = doc.GetImages();
var pi = imgs[0].Image;

// 画像IDを書き込みます。
Console.WriteLine($"PdfImage object ID: {pi.ObjID}");

/* PdfImage はPdfDictWrapper オブジェクトから継承し、基になる PDF ストリーム オブジェクトからプロパティとデータを取得できるメソッドが含まれています*/ 
using (PdfStreamInfo psi = pi.GetPdfStreamInfo())
{
    // 画像フィルター名、フィルターデコードパラメータなどの画像情報を取得します。
    Console.WriteLine($"    Image stream length: {psi.Stream.Length}");
    Console.WriteLine($"        ImageFilterName: {psi.ImageFilterName}");
    Console.WriteLine($"ImageFilterDecodeParams: {psi.ImageFilterDecodeParams}");
    
    // ImageFilterDecodeParams の内容を取得します。
    foreach (var kvp in psi.ImageFilterDecodeParams.Dict)
    {
        Console.WriteLine($"{kvp.Key}: {kvp.Value}");
    }
    
    // BlackIs1の値を取得します。
    var blackIs1 = psi.ImageFilterDecodeParams.GetBool(PdfName.Std.BlackIs1, null);
    Console.WriteLine($"BlackIs1: {blackIs1}");
}
                
// PdfImage 辞書のプロパティを取得します。
Console.WriteLine();
Console.WriteLine("Properties of PdfImage dictionary:");
foreach (KeyValuePair<PdfName, IPdfObject> kvp in pi.PdfDict.Dict)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
                
// コンポーネントごとの色空間とビットを取得します。
var cs = pi.Get<IPdfObject>(PdfName.Std.ColorSpace);
Console.WriteLine($"ColorSpace: {cs.GetType().Name} {cs}");
var bpc = pi.Get<IPdfObject>(PdfName.Std.BitsPerComponent);
Console.WriteLine($"BitsPerComponent: {bpc?.GetType().Name} {bpc}");