空の XPS OM を作成する
このトピックでは、空の XPS OM を作成する方法について説明します。 ここでは、XPS OM を使用して、1 つの空白ページを含む XPS ドキュメントのドキュメント構造を構築する方法を説明するコード例を示します。
XPS ドキュメントとして保存するには、XPS OM 少なくとも次のコンポーネントが必要です:
- XPS ドキュメント パッケージを記述する IXpsOMPackage
- パッケージコンテンツのフレームワークを含む IXpsOMDocumentSequence
- パッケージ内のドキュメントのフレームワークを含む IXpsOMDocument
- ドキュメント内のページのコレクションを含む IXpsOMPageReference
- 空白のページを含む IXpsOMPage
これらのインターフェイスを使用すると、XPS OM には 1 つの空白ページを含むドキュメントが含まれます。 XPS OM でこのドキュメントを作成するには、最初に個々のコンポーネントを作成してから、それらをリンクする必要があります。
次のコード例を使用する前に、「一般的な XPS ドキュメント プログラミング タスク」の免責事項をお読みください。
コード例
次のコード例では、「XPS OM の初期化」で説明している初期化が成功したことを前提としています。
// Declare the variables used in this section.
HRESULT hr = S_OK;
IOpcPartUri *opcPartUri = NULL;
IXpsOMPackage *xpsPackage = NULL;
IXpsOMDocumentSequence *xpsFDS = NULL;
IXpsOMDocumentCollection *fixedDocuments = NULL;
IXpsOMDocument *xpsFD = NULL;
IXpsOMPage *xpsPage = NULL;
IXpsOMPageReferenceCollection *pageRefs = NULL;
IXpsOMPageReference *xpsPageRef = NULL;
// These values are set outside of this code example.
XPS_SIZE pageSize = {width, height};
// Create the package.
hr = xpsFactory->CreatePackage( &xpsPackage );
// Create the URI for the fixed document sequence part and then
// create the fixed document sequence
hr = xpsFactory->CreatePartUri(
L"/FixedDocumentSequence.fdseq", &opcPartUri );
hr = xpsFactory->CreateDocumentSequence( opcPartUri, &xpsFDS );
// Release this URI to reuse the interface pointer.
if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}
// Create the URI for the document part and then create the document.
hr = xpsFactory->CreatePartUri(
L"/Documents/1/FixedDocument.fdoc", &opcPartUri );
hr = xpsFactory->CreateDocument( opcPartUri, &xpsFD );
// Release this URI to reuse the interface pointer.
if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}
// Create a blank page.
hr = xpsFactory->CreatePartUri(
L"/Documents/1/Pages/1.fpage", &opcPartUri );
hr = xpsFactory->CreatePage(
&pageSize, // Page size
L"en-US", // Page language
opcPartUri, // Page part name
&xpsPage);
// Release this URI to reuse the interface pointer.
if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}
// Create a page reference for the page.
hr = xpsFactory->CreatePageReference( &pageSize, &xpsPageRef );
// Add the fixed document sequence to the package.
hr = xpsPackage->SetDocumentSequence( xpsFDS );
// Get the document collection of the fixed document sequence
// and then add the document to the collection.
hr = xpsFDS->GetDocuments( &fixedDocuments );
hr = fixedDocuments->Append( xpsFD );
// Get the page reference collection from the document
// and add the page reference and blank page.
hr = xpsFD->GetPageReferences( &pageRefs );
hr = pageRefs->Append( xpsPageRef );
hr = xpsPageRef->SetPage( xpsPage );
// Release interface pointer
if (NULL != xpsPage) xpsPage->Release();
if (NULL != pageRefs) pageRefs->Release();
if (NULL != fixedDocuments) fixedDocuments->Release();
if (NULL != xpsPageRef) xpsPageRef->Release();
if (NULL != xpsFD) xpsFD->Release();
if (NULL != xpsFDS) xpsFDS->Release();
if (NULL != xpsPackage) xpsPackage->Release();
ベスト プラクティス
IOpcPartUri インターフェイスを使用してコンポーネントを作成した後 (コード例で CreateDocument メソッドを呼び出した後など)、別の呼び出しに必要な場合を除き、そのインターフェイスへのポインターを解放します。
関連トピック
-
次のステップ
-
このページで使用
-
詳細情報