PDF ドキュメントは、プリミティブと高レベルのPDFオブジェクトで構成されています。一般に、PDF ドキュメントには、 PDF 仕様で定義されている次の 9 つのプリミティブオブジェクトが含まれており、これらのリンクされたプリミティブオブジェクトはグラフとして解釈できます。
オブジェクトモデル内のすべての高レベルオブジェクト (Page、AnnotationBase、Action など) は、プリミティブオブジェクトを囲むラッパとして実装されます。ラッパーには、基になるプリミティブタイプ (PdfDict、PdfArray、PdfDictObject など) への参照が含まれます。また、基になるオブジェクトにアクセスして操作するためのメソッドとプロパティが提供されます。PdfWrapperBase は、すべての高レベルオブジェクトのルートクラスです。PdfWrapperBaseには、IPdfObject によって定義される基になるプリミティブ オブジェクトへの参照が含まれます。
DioDocs for PDF を使用すると、GrapeCity.Documents.Pdf.Spec 名前空間内に次のインターフェイスとクラス、およびこの名前空間に含まれるメソッドとプロパティを使用して、PDF ドキュメント内に DocumentInfo や 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}"); |