Compartilhar via


Interfaces de parte do OM do XPS

Este tópico descreve como usar as interfaces que fornecem acesso a partes de documento XPS em um OM XPS.

Nome da interface Interfaces filho lógicas Descrição
IXpsOMPart
IXpsOMDocumentSequence
IXpsOMDocument
IXpsOMPageReference
IXpsOMCoreProperties
IXpsOMResource
Componentes de documento que compõem a estrutura do documento.
IXpsOMResource
IXpsOMPartResources
IXpsOMFontResource
IXpsOMImageResource
IXpsOMColorProfileResource
IXpsOMPrintTicketResource
IXpsOMRemoteDictionaryResource
IXpsOMDocumentStructureResource
IXpsOMStoryFragmentsResource
IXpsOMSignatureBlockResource
Componentes de documento que contêm elementos que são usados ou referenciados por uma página ou um documento.
IXpsOMPartUriCollection
Nenhum
Uma coleção de URIs de parte.

Exemplos de código

Os exemplos de código a seguir mostram dois exemplos de como usar as interfaces de parte para acessar o conteúdo do OM do XPS.

Obter o nome de uma parte do documento

O exemplo de código a seguir navega até uma parte do documento e obtém o nome da parte.

    HRESULT                         hr = S_OK;
    
    IXpsOMDocumentSequence          *docSeq;
    IXpsOMDocumentCollection        *docs;
    IXpsOMDocument                  *doc;
    IXpsOMPageReferenceCollection   *pages;
    IXpsOMPageReference             *pageRef;
    IXpsOMPage                      *page;

    IOpcPartUri                     *thisDocPartUri;
    IOpcPartUri                     *thisPagePartUri;

    UINT32  numDocs = 0;
    UINT32  thisDoc = 0;

    UINT32  numPageRefs = 0;
    UINT32  thisPageRef = 0;

    // package points to the IXpsOMPackage interface to walk.

    // get the fixed document sequence of the package
    hr = package->GetDocumentSequence(&docSeq);

    // get the fixed documents in the fixed document sequence
    hr = docSeq->GetDocuments(&docs);

    // walk the collection of documents;
    hr = docs->GetCount(&numDocs);
    thisDoc = 0;
    while (thisDoc < numDocs) {
        hr = docs->GetAt(thisDoc, &doc);
        
        // get the part name (URI) of this document
        hr = doc->GetPartName ( &thisDocPartUri );

        // get the doc contents
        hr = doc->GetPageReferences(&pages);
        
        // walk the collection of page references
        hr = pages->GetCount(&numPageRefs);
        thisPageRef = 0;
        while (thisPageRef < numPageRefs) {
            // get this page reference
            hr = pages->GetAt(thisPageRef, &pageRef );

            // get the part name (URI) of this page
            hr = pageRef->GetPage (&page);
            hr = page->GetPartName ( &thisPagePartUri );

            // do something with the part name
 
            thisPagePartUri->Release();
            page->Release();
            pageRef->Release();

            thisPageRef++;
        }
        pages->Release();
        thisDocPartUri->Release();
        doc->Release();
        thisDoc++;
    }

    docs->Release();
    docSeq->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 );

    // use resources

    dictionaryResources->Release();
    imageResources->Release();
    fontResources->Release();
    colorProfileResources->Release();
    resources->Release();