[]
        
(Showing Draft Content)

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

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

  • PDF配列

  • PDFブール

  • PDF辞書

  • PDF名

  • PDF null

  • PDF数値

  • PDF参照

  • PDFストリーム

  • PDF文字列

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

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

!type=note

メモ: 以下で説明するすべてのインターフェース/クラスとそのメンバは、上級ユーザーのみが使用できます。このドキュメントの読者は、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 が提供する拡張メソッドを使用できるようになります

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

// 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}");