IXpsOMPageReference
COM公式ドキュメント
XPS ドキュメント内のページの仮想化を可能にします。
解説(Remarks)
次のコード例は、このインターフェイスのインスタンスを作成する方法を示しています。
IXpsOMPageReference *newInterface;
// 次の値は、この例の外部で定義されています。
XPS_SIZE advisoryPageDimensions;
// このスレッドで CoInitializeEx が事前に呼び出されている必要があるという
// 暗黙の前提がある点に注意してください。
hr = CoCreateInstance(
__uuidof(XpsOMObjectFactory),
NULL,
CLSCTX_INPROC_SERVER,
_uuidof(IXpsOMObjectFactory),
reinterpret_cast<LPVOID*>(&xpsFactory)
);
if (SUCCEEDED(hr))
{
hr = xpsFactory->CreatePageReference (
&advisoryPageDimensions,
&newInterface);
if (SUCCEEDED(hr))
{
// newInterface を使用します
newInterface->Release();
}
xpsFactory->Release();
}
else
{
// hr に返された HRESULT エラーを評価します
}
プログラムでこのインターフェイスを使用する方法については、Create a Blank XPS OM および Navigate the XPS OM を参照してください。
メソッド 17
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ページ参照を含む IXpsOMDocument インターフェイスへのポインターを取得します。
| document | IXpsOMDocument** | out | ページ参照を含む IXpsOMDocument インターフェイスへのポインターです。ページ参照に所有者がない場合は、NULL ポインターが返されます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| document が NULL です。 |
ページを含む IXpsOMPage インターフェイスへのポインターを取得します。
| page | IXpsOMPage** | out | ページの IXpsOMPage インターフェイスへのポインターです。ページが設定されていない場合は、NULL ポインターが返されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない XPS ドキュメント API の戻り値については、XPS Document Errors を参照してください。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| document が NULL です。 |
このメソッドは Packaging API を呼び出します。Packaging API の戻り値については、Packaging Errors を参照してください。
解説(Remarks)
ページが設定されていない場合でも、そのページ参照を含む IXpsOMPackage インターフェイスが XPS パッケージから読み込まれていれば、このメソッドはページを読み込んで返します。ページが設定されておらず、このページ参照を含む IXpsOMPackage インターフェイスも XPS パッケージから読み込まれていない場合は、NULL ポインターが返されます。
ページの内容によっては、この呼び出しが戻るまでに時間がかかることがあり、ドキュメントツリー内の他のオブジェクトに予期しない変更が生じる場合もあります。たとえば、ページがリモートリソースディクショナリを参照している場合、そのリモートリソースディクショナリが変更されることがあります。
ページ参照の IXpsOMPage インターフェイスを設定します。
| page | IXpsOMPage* | in | ページの IXpsOMPage インターフェイスポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| page が NULL です。 | |
| page が認識されるインターフェイス実装を指していません。XPS Document API インターフェイスの独自実装はサポートされていません。 |
解説(Remarks)
このメソッドで追加するページは、空でも完全に構築済みでもかまいません。
追加するページがリモートディクショナリオブジェクトへの参照を持っている場合、それらのオブジェクトはこの呼び出しではドキュメントオブジェクトにインポートされません。IXpsOMPage::SetDictionaryResource メソッドまたは IXpsOMCanvas::SetDictionaryResource メソッドを個別に呼び出して追加する必要があります。
既にページが設定されている場合、呼び出し側は新しいページで SetPage を呼び出す前に、そのページを解放しておく必要があります。新しいページで SetPage を呼び出した後は、元のページがパッケージ内に残っていても破棄できなくなるためです。
ページをメモリから破棄します。
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
DiscardPage が複数回呼び出されたか、ページが読み込まれていません。 |
解説(Remarks)
SetPage が呼び出されていない場合、DiscardPage を呼び出した後に GetPage を呼び出すと、ソースパッケージから仮想化されたページが返されます。SetPage が呼び出されている場合、DiscardPage を呼び出した後に GetPage を呼び出すと NULL が返されます。
この IXpsOMPageReference インターフェイスが参照するページがすべてメモリ上で構築されており、対応するファイルが存在しない場合、DiscardPage はページをメモリから削除し、ページの内容は失われます。ページがファイルから構築されている場合、DiscardPage はページをメモリから削除しますが、元のファイルは変更しません。ページは GetPage を呼び出すことで再構築され、メモリに読み込み直すことができます。
ページがファイルから構築された後に変更されている場合、DiscardPage はページをメモリから破棄し、ページに加えられた変更は失われます。この後に GetPage を呼び出すと、元の内容がファイルから再度読み込まれます。
参照先ページの状態、つまりページが読み込まれているかどうかを取得します。
| isPageLoaded | BOOL* | out | ページの状態を示すブール値です。
|
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| isPageLoaded が NULL です。 |
ページの推奨サイズを取得します。
| pageDimensions | XPS_SIZE* | out | ページの推奨サイズです。 サイズは XPS 単位で表されます。1 インチは 96 XPS 単位です。たとえば、8.5" × 11.0" のページのサイズは 816 × 1,056 XPS 単位です。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pageDimensions が NULL です。 |
解説(Remarks)
ページの推奨サイズを設定します。
| pageDimensions | XPS_SIZE* | in | ページに設定する推奨サイズです。 height メンバーと width メンバーには、–1.0 または +1.0 以上の値を指定する必要があります。 サイズは XPS 単位で表されます。1 インチは 96 XPS 単位です。たとえば、8.5" × 11.0" のページのサイズは 816 × 1,056 XPS 単位です。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pageDimensions が NULL であるか、pageDimensions が参照する XPS_SIZE 構造体のフィールドに無効な値が含まれています。 | |
| pageDimensions で指定された推奨ページサイズが無効です。pageDimensions の height メンバーと width メンバーには、–1.0 または +1.0 以上の値を指定する必要があります。 |
解説(Remarks)
pageDimensions が参照する XPS_SIZE 構造体の height メンバーと width メンバーには、値を設定する場合は +1.0 以上の値を、設定しない場合は –1.0 を指定する必要があります。たとえば、ページの幅にだけ推奨サイズを設定する場合は、pageDimensions.width に目的の値を指定し、pageDimensions.height には –1.0 を指定します。
ページに関連付けられている StoryFragments パートのリソースの IXpsOMStoryFragmentsResource インターフェイスへのポインターを取得します。
| storyFragmentsResource | IXpsOMStoryFragmentsResource** | out | ページに関連付けられている StoryFragments パートのリソースの IXpsOMStoryFragmentsResource インターフェイスへのポインターです。StoryFragments パートが存在しない場合は、NULL ポインターが返されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない XPS ドキュメント API の戻り値については、XPS Document Errors を参照してください。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| storyFragmentsResource が NULL です。 |
このメソッドは Packaging API を呼び出します。Packaging API の戻り値については、Packaging Errors を参照してください。
解説(Remarks)
リソースが解析されて XPS OM に読み込まれた後、このメソッドが別のリソースに関するエラーを返す場合があります。これは、リソースの読み込み時にすべてのリレーションシップが解析されるためです。
ページの StoryFragments パートには、1 つの固定ページに関連付けられた 1 つ以上のストーリーの一部を記述する XML マークアップが含まれます。StoryFragments パートの XML マークアップが記述するドキュメントの内容には、そのページ上にあるストーリーの表や段落などがあります。
DocumentStructure パートと StoryFragments パートの XML マークアップについては、XML Paper Specification で説明されています。
ページに割り当てる StoryFragments リソースの IXpsOMStoryFragmentsResource インターフェイスポインターを設定します。
| storyFragmentsResource | IXpsOMStoryFragmentsResource* | in | ページに割り当てる StoryFragments パートのリソースの IXpsOMStoryFragmentsResource インターフェイスへのポインターです。IXpsOMStoryFragmentsResource インターフェイスが既に設定されている場合、NULL ポインターを指定するとそれが解放されます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| storyFragmentsResource が認識されるインターフェイス実装を指していません。XPS Document API インターフェイスの独自実装はサポートされていません。 |
解説(Remarks)
ページの StoryFragments パートには、1 つの固定ページに関連付けられた 1 つ以上のストーリーの一部を記述する XML マークアップが含まれます。StoryFragments パートの XML マークアップが記述するドキュメントの内容には、そのページ上にあるストーリーの表や段落などがあります。
DocumentStructure パートと StoryFragments パートの XML マークアップについては、XML Paper Specification で説明されています。
ページに関連付けられているページレベルの印刷チケットリソースの IXpsOMPrintTicketResource インターフェイスへのポインターを取得します。
| printTicketResource | IXpsOMPrintTicketResource** | out | ページに関連付けられているページレベルの印刷チケットリソースの IXpsOMPrintTicketResource インターフェイスへのポインターです。印刷チケットリソースが設定されていない場合は、NULL ポインターが返されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない XPS ドキュメント API の戻り値については、XPS Document Errors を参照してください。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| printTicketResource が NULL です。 |
このメソッドは Packaging API を呼び出します。Packaging API の戻り値については、Packaging Errors を参照してください。
解説(Remarks)
リソースを XPS OM に読み込んで解析した後、このメソッドが別のリソースに関するエラーを返す場合があります。これは、リソースの読み込み時にすべてのリレーションシップが解析されるためです。
ページに割り当てるページレベルの印刷チケットリソースの IXpsOMPrintTicketResource インターフェイスポインターを設定します。
| printTicketResource | IXpsOMPrintTicketResource* | in | ページに割り当てるページレベルの印刷チケットリソースの IXpsOMPrintTicketResource インターフェイスへのポインターです。印刷チケットが既に設定されている場合、NULL ポインターを指定するとそれが解放されます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| printTicketResource が認識されるインターフェイス実装を指していません。XPS Document API インターフェイスの独自実装はサポートされていません。 |
ページに関連付けられているサムネイル画像リソースの IXpsOMImageResource インターフェイスへのポインターを取得します。
| imageResource | IXpsOMImageResource** | out | ページに関連付けられているサムネイル画像リソースの IXpsOMImageResource インターフェイスへのポインターです。サムネイル画像リソースがページに割り当てられていない場合は、NULL ポインターが返されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない XPS ドキュメント API の戻り値については、XPS Document Errors を参照してください。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| imageResource が NULL です。 |
このメソッドは Packaging API を呼び出します。Packaging API の戻り値については、Packaging Errors を参照してください。
解説(Remarks)
サムネイル画像は、ページの内容を小さく視覚的に表したものです。
リソースを XPS OM に読み込んで解析した後、このメソッドが別のリソースに関するエラーを返す場合があります。これは、リソースの読み込み時にすべてのリレーションシップが解析されるためです。
ページに割り当てるサムネイル画像リソースの IXpsOMImageResource インターフェイスへのポインターを設定します。
| imageResource | IXpsOMImageResource* | in | ページに割り当てるサムネイル画像リソースの IXpsOMImageResource インターフェイスへのポインターです。IXpsOMImageResource インターフェイスが既に設定されている場合、NULL ポインターを指定するとそれが解放されます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| imageResource の画像は、サポートされている画像形式ではありません。 | |
| imageResource が認識されるインターフェイス実装を指していません。XPS Document API インターフェイスの独自実装はサポートされていません。 |
解説(Remarks)
サムネイル画像は、ドキュメントの内容を小さく視覚的に表したものです。
画像リソースの画像形式は、XPS_IMAGE_TYPE_JPEG または XPS_IMAGE_TYPE_PNG のいずれかである必要があります。
IsHyperlinkTarget プロパティが TRUE に設定されている、ドキュメントサブツリー内のすべてのオブジェクトの名前を格納した IXpsOMNameCollection インターフェイスを取得します。
| linkTargets | IXpsOMNameCollection** | out | IsHyperlinkTarget プロパティが TRUE に設定されている、ドキュメントサブツリー内のすべてのオブジェクトの名前を格納した IXpsOMNameCollection インターフェイスへのポインターです。そのようなオブジェクトがドキュメント内に存在しない場合、IXpsOMNameCollection インターフェイスは空になります。 Note このメソッドは、呼び出すたびに新しいコレクションを返します。
|
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| この操作を実行するのに十分なメモリがありません。 | |
| linkTargets が NULL です。 |
解説(Remarks)
ページが元々パッケージから読み込まれたものであり、現在オブジェクトモデルに読み込まれていない場合、このメソッドは元の PageContent.LinkTargets マークアップで指定された値を返します。
ドキュメントにリンクターゲットが 1 つも存在しない場合、linkTargets に返される名前コレクションは空になります。
linkTargets に返されるコレクションの要素数を取得するには、コレクションの GetCount メソッドを呼び出します。
このメソッドは、呼び出すたびに新しいコレクションへのポインターを返します。メモリリークを防ぐため、以前のコレクションへのポインターは、不要になった時点、またはポインター変数をこのメソッドの次の呼び出しに再利用する前に解放してください。次のコード例は、プログラムでこれを行う方法を示しています。
HRESULT hr = S_OK;
IXpsOMPage *page = NULL;
IXpsOMNameCollection *linkTargets = NULL;
UINT32 numTargets = 0;
UINT32 thisTarget = 0;
LPWSTR thisTargetName = NULL;
// pageRef には現在のページ参照が格納されています
// ページがまだ読み込まれていない場合(たとえば XPS OM が XPS ドキュメントから
// 読み込まれた場合)、CollectLinkTargets は <PageContent.LinkTargets> マークアップから
// リンクターゲットの一覧を取得します
hr = pageRef->CollectLinkTargets(&linkTargets);
// このページ参照のページコンテンツを取得します
hr = pageRef->GetPage (&page);
// GetPage の呼び出しによってページオブジェクトが読み込まれた後、または
// XPS OM でページを作成した後は、CollectLinkTargets が各ページ要素を
// 調べて一覧を返すため、XPS OM がファイルから作成された場合、この
// CollectLinkTargets の呼び出しは上記の呼び出しよりも時間がかかることがあります
linkTargets->Release(); // 以前のコレクションを解放します
hr = pageRef->CollectLinkTargets(&linkTargets);
// 返されたリンクターゲットの一覧を走査します
hr = linkTargets->GetCount( &numTargets );
thisTarget = 0;
while (thisTarget < numTargets) {
hr = linkTargets->GetAt (thisTarget, &thisTargetName);
printf ("%s\n", thisTargetName);
// メモリリークを防ぐため、返されたターゲット文字列を解放します
CoTaskMemFree (thisTargetName);
// 一覧内の次のターゲットを取得します
thisTarget++;
}
// ページとリンクターゲットコレクションを解放します
page->Release();
linkTargets->Release();
ページに関連付けられているすべてのパートベースのリソースの一覧を作成します。
| partResources | IXpsOMPartResources** | out | ページに関連付けられているすべてのパートベースのリソースの一覧を格納する IXpsOMPartResources インターフェイスへのポインターです。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない XPS ドキュメント API の戻り値については、XPS Document Errors を参照してください。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| partResources が NULL です。 |
このメソッドは Packaging API を呼び出します。Packaging API の戻り値については、Packaging Errors を参照してください。
解説(Remarks)
このメソッドの呼び出し時にページが読み込まれていない場合、このメソッドはページのリレーションシップパートを解析してこのページに関連付けられたパートベースのリソースを検出し、partResources パラメーターに返します。ページが読み込まれている場合は、ページのオブジェクトモデルをたどってパートベースのリソースを検出し、partResources に返します。
IXpsOMPartResources インターフェイスに返されるリソースパートの一覧は、メソッドが呼び出された時点のドキュメント構造のスナップショットです。この呼び出しの後にドキュメントに加えられた変更は、このメソッドが返した IXpsOMPartResources インターフェイスには反映されません。同様に、このメソッドが返した IXpsOMPartResources インターフェイスに加えた変更も、ドキュメントの内容には反映されません。
参照先ページのドキュメントサブツリーに、EmbeddingOption プロパティが XPS_FONT_EMBEDDING_RESTRICTED に設定されたフォントリソースを持つ Glyphs が含まれているかどうかを示すブール値を取得します。
| restrictedFonts | BOOL* | out | 参照先ページのドキュメントサブツリーに、EmbeddingOption プロパティが XPS_FONT_EMBEDDING_RESTRICTED に設定されたフォントリソースを持つ IXpsOMGlyphs インターフェイスが含まれているかどうかを示すブール値です。
|
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| restrictedFonts が NULL です。 |
解説(Remarks)
この値は自動的には更新されません。フォントやグリフの追加や削除によって値が変化する場合は、HasRestrictedFonts を再度呼び出して現在の値を取得する必要があります。
インターフェイスのディープコピーを作成します。(IXpsOMPageReference.Clone)
| pageReference | IXpsOMPageReference** | out | インターフェイスのコピーへのポインターです。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| この操作を実行するのに十分なメモリがありません。 | |
| pageReference が NULL です。 |
解説(Remarks)
このメソッドは、新しい IXpsOMPageReference インターフェイス内のリソースポインターを更新しません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IXpsOMPageReference "{ED360180-6F92-4998-890D-2F208531A0A0}" #usecom global IXpsOMPageReference IID_IXpsOMPageReference "{}" #comfunc global IXpsOMPageReference_GetOwner 3 sptr #comfunc global IXpsOMPageReference_GetPage 4 sptr #comfunc global IXpsOMPageReference_SetPage 5 sptr #comfunc global IXpsOMPageReference_DiscardPage 6 #comfunc global IXpsOMPageReference_IsPageLoaded 7 var #comfunc global IXpsOMPageReference_GetAdvisoryPageDimensions 8 var #comfunc global IXpsOMPageReference_SetAdvisoryPageDimensions 9 var #comfunc global IXpsOMPageReference_GetStoryFragmentsResource 10 sptr #comfunc global IXpsOMPageReference_SetStoryFragmentsResource 11 sptr #comfunc global IXpsOMPageReference_GetPrintTicketResource 12 sptr #comfunc global IXpsOMPageReference_SetPrintTicketResource 13 sptr #comfunc global IXpsOMPageReference_GetThumbnailResource 14 sptr #comfunc global IXpsOMPageReference_SetThumbnailResource 15 sptr #comfunc global IXpsOMPageReference_CollectLinkTargets 16 sptr #comfunc global IXpsOMPageReference_CollectPartResources 17 sptr #comfunc global IXpsOMPageReference_HasRestrictedFonts 18 var #comfunc global IXpsOMPageReference_Clone 19 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IXpsOMPageReference "{ED360180-6F92-4998-890D-2F208531A0A0}" #usecom global IXpsOMPageReference IID_IXpsOMPageReference "{}" #comfunc global IXpsOMPageReference_GetOwner 3 sptr #comfunc global IXpsOMPageReference_GetPage 4 sptr #comfunc global IXpsOMPageReference_SetPage 5 sptr #comfunc global IXpsOMPageReference_DiscardPage 6 #comfunc global IXpsOMPageReference_IsPageLoaded 7 sptr #comfunc global IXpsOMPageReference_GetAdvisoryPageDimensions 8 sptr #comfunc global IXpsOMPageReference_SetAdvisoryPageDimensions 9 sptr #comfunc global IXpsOMPageReference_GetStoryFragmentsResource 10 sptr #comfunc global IXpsOMPageReference_SetStoryFragmentsResource 11 sptr #comfunc global IXpsOMPageReference_GetPrintTicketResource 12 sptr #comfunc global IXpsOMPageReference_SetPrintTicketResource 13 sptr #comfunc global IXpsOMPageReference_GetThumbnailResource 14 sptr #comfunc global IXpsOMPageReference_SetThumbnailResource 15 sptr #comfunc global IXpsOMPageReference_CollectLinkTargets 16 sptr #comfunc global IXpsOMPageReference_CollectPartResources 17 sptr #comfunc global IXpsOMPageReference_HasRestrictedFonts 18 sptr #comfunc global IXpsOMPageReference_Clone 19 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。