Compartilhar via


Trabalhando com interfaces IXpsOMPageReference

Este tópico descreve como usar as interfaces que fornecem acesso a referências de página em um OM XPS.

Nome da interface Interfaces filho lógicas Descrição
IXpsOMPageReference
IXpsOMPage
Virtualiza o conteúdo de uma página de documento.
Uma referência de página contém informações básicas sobre a página, algumas propriedades de página e um link para o conteúdo da página. A interface IXpsOMPage que compreende o conteúdo da página é retornada pelo método IXpsOMPageReference::GetPage .
IXpsOMNameCollection
Nenhum
Contém uma lista de itens de página que são destinos de hiperlink. A lista é retornada pelo método IXpsOMPageReference::CollectLinkTargets .
IXpsOMPartResources
Nenhum
Contém uma lista dos recursos baseados em componentes associados à página. Essa lista é retornada pelo método IXpsOMPageReference::CollectPartResources .

Exemplos de código

Os exemplos de código a seguir ilustram como trabalhar com as interfaces de referência de página em um programa.

Obter o conteúdo da página

O exemplo de código a seguir obtém um ponteiro para a interface IXpsOMPage que contém o conteúdo da página. Se a página não tiver sido carregada no OM XPS, como acontece quando o OM XPS é inicializado chamando IXpsOMObjectFactory::CreatePackageFromFile, chamar IXpsOMPageReference::GetPage carregará a página no OM XPS.

    {
    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);

O exemplo de código a seguir obtém um ponteiro para a interface IXpsOMNameCollection que contém a lista de itens de página que são destinos de hiperlink. Se a página não tiver sido carregada no OM XPS, a lista de destinos de hiperlink será lida a partir da marcação PageContent.LinkTargets. Se a página tiver sido carregada, CollectLinkTargets verificará cada elemento na página e retornará uma lista de elementos cujo atributo 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();

Obter os recursos de parte associados a esta página

O exemplo de código a seguir obtém as listas dos diferentes recursos que são usados por esta página.

    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 Paper Specification