共用方式為


使用IXpsOMPageReference 介面

本主題描述如何使用提供 XPS OM 中頁面參考存取權的介面。

介面名稱 邏輯子介面 描述
IXpsOMPageReference
IXpsOMPage
虛擬化文件頁面的內容。
頁面參考包含頁面的基本資訊、部分頁面屬性,以及頁面內容的連結。 IXpsOMPageReference::GetPage 方法會傳回 IXpsOMPage 介面,此介面由頁面內容組成。
IXpsOMNameCollection
沒有
包含超連結目標的頁面項目清單。 清單會由 IXpsOMPageReference::CollectLinkTargets 方法傳回。
IXpsOMPartResources
沒有
包含與頁面相關聯的元件型資源清單。 IXpsOMPageReference::CollectPartResources 方法會傳回此清單。

程式代碼範例

下列程式代碼範例說明如何使用程式中的頁面參考介面。

取得頁面內容

下列程式代碼範例會取得由頁面內容所組成之 IXpsOMPage 介面的指標。 如果頁面尚未載入 XPS OM,呼叫 IXpsOMObjectFactory::CreatePackageFromFile初始化 XPS OM 時,呼叫 IXpsOMPageReference::GetPage 就會將頁面載入 XPS OM。

    {
    HRESULT        hr = S_OK;
    IXpsOMPage     *page = NULL;

    // pageRef contains the current page reference
    // and is passed in as a parameter

    // get the page content of this page reference
    hr = pageRef->GetPage (&page);

下列程式代碼範例會取得 IXpsOMNameCollection 介面的指標,其中包含超連結目標的頁面項目清單。 如果頁面尚未載入 XPS OM 中,則會從 pageContent.LinkTargets 標記 讀取超連結目標清單。 如果頁面已載入,CollectLinkTargets 會檢查頁面中的每個元素,並傳回 IsHyperlinkTarget 屬性為 TRUE的元素清單。

    HRESULT                         hr = S_OK;
    IXpsOMPage                      *page = NULL;
    IXpsOMNameCollection            *linkTargets = NULL;

    UINT32 numTargets = 0;
    UINT32 thisTarget = 0;
    LPWSTR thisTargetName = NULL;

    // pageRef contains the current page reference 

    // if the page hasn't been loaded yet, for example, if the XPS OM 
    //  was loaded from an XPS document, CollectLinkTargets obtains the
    //  list of link targets from the <PageContent.LinkTargets> markup
    hr = pageRef->CollectLinkTargets(&linkTargets);

    // get the page content of this page reference
    hr = pageRef->GetPage (&page);

    // after the page object has been loaded and calling GetPage or 
    //  by creating a page in the XPS OM, CollectLinkTargets will now check
    //  each of the page elements to return the list so this call to
    //  CollectLinkTargets might take longer to return than the previous
    //  call above if the XPS OM was created from a file
    linkTargets->Release(); // release previous collection
    hr = pageRef->CollectLinkTargets(&linkTargets);
    
    // walk the list of link targets returned
    hr = linkTargets->GetCount( &numTargets );
    thisTarget = 0;
    while (thisTarget < numTargets) {
        hr = linkTargets->GetAt (thisTarget, &thisTargetName);
        printf ("%s\n", thisTargetName);
        // release the target string returned to prevent memory leaks
        CoTaskMemFree (thisTargetName);
        // get next target in list
        thisTarget++;
    }
    // release page and the link target collection
    page->Release();
    linkTargets->Release();

取得與此頁面相關聯的元件資源

下列程式代碼範例會取得此頁面所使用的不同資源清單。

    HRESULT                                   hr = S_OK;
    IXpsOMPartResources                       *resources;

    IXpsOMColorProfileResourceCollection      *colorProfileResources;
    IXpsOMFontResourceCollection              *fontResources;
    IXpsOMImageResourceCollection             *imageResources;
    IXpsOMRemoteDictionaryResourceCollection  *dictionaryResources; 

    // pageRef contains the current page reference 
    hr = pageRef->CollectPartResources ( &resources );

    // Get pointers to each type of resource
    hr = resources->GetColorProfileResources( &colorProfileResources );
    hr = resources->GetFontResources( &fontResources );
    hr = resources->GetImageResources( &imageResources );
    hr = resources->GetRemoteDictionaryResources( &dictionaryResources );

IXpsOMNameCollection

IXpsOMPage

IXpsOMPageReference

IXpsOMPartResources

XML 紙張規格