Compartir a través de


Trabajar con interfaces IXpsOMPageReference

En este tema se describe cómo usar las interfaces que proporcionan acceso a las referencias de página en un OM XPS.

Nombre de la interfaz Interfaces secundarias lógicas Descripción
IXpsOMPageReference
IXpsOMPage
Virtualiza el contenido de una página de documento.
Una referencia de página contiene información básica sobre la página, algunas propiedades de página y un vínculo al contenido de la página. El método IXpsOMPagedevuelve la interfazIXpsOMPageReference::GetPageque comprende el contenido de la página.
IXpsOMNameCollection
Ninguno
Contiene una lista de elementos de página que son destinos de hipervínculo. El método IXpsOMPageReference::CollectLinkTargetsdevuelve la lista.
IXpsOMPartResources
Ninguno
Contiene una lista de los recursos basados en partes asociados a la página. El método IXpsOMPageReference::CollectPartResources devuelve esta lista.

Ejemplos de código

Los siguientes ejemplos de código muestran cómo trabajar con las interfaces de referencia de página en un programa.

Obtener el contenido de la página

En el ejemplo de código siguiente se obtiene un puntero a la interfaz IXpsOMPage que comprende el contenido de la página. Si la página no se ha cargado en el OM XPS, como sucede cuando se inicializa el OM XPS llamando a IXpsOMObjectFactory::CreatePackageFromFile, llamando a IXpsOMPageReference::GetPage cargará la página en el 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);

En el ejemplo de código siguiente se obtiene un puntero a la interfazIXpsOMNameCollection que contiene la lista de elementos de página que son destinos de hipervínculo. Si la página no se ha cargado en el OM XPS, la lista de destinos de hipervínculo se lee desde el marcado PageContent.LinkTargets. Si se ha cargado la página, CollectLinkTargets comprueba cada elemento de la página y devuelve una lista de elementos cuyo atributo IsHyperlinkTarget es 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();

Obtener los recursos de elementos asociados a esta página

En el ejemplo de código siguiente se obtienen las listas de los distintos recursos que usa 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