Поделиться через


Создание пустой OM XPS

В этом разделе описывается создание пустой OM XPS. В нем представлены примеры кода, иллюстрирующие использование OM XPS для создания структуры документа XPS с одной пустой страницей.

Для сохранения в качестве документа XPS OM XPS требуется по крайней мере следующие компоненты:

  • IXpsOMPackage, описывающий пакет документов XPS
  • IXpsOMDocumentSequence, содержащий платформу содержимого пакета
  • IXpsOMDocument, содержащий платформу документа в пакете
  • IXpsOMPageReference, содержащий коллекцию страниц в документе
  • IXpsOMPage, содержащий пустую страницу

При использовании этих интерфейсов OM XPS будет содержать документ с одной пустой страницей. Чтобы создать этот документ в OM XPS, программа должна сначала создать отдельные компоненты, а затем связать их вместе.

Прежде чем использовать приведенные ниже примеры кода, прочтите заявление об отказе в задачах программирования документов Common XPS.

Примеры кода

В следующем примере кода предполагается, что инициализация, описанная в инициализации OM XPS, успешно выполнена.

    // Declare the variables used in this section.
    HRESULT                       hr = S_OK;
    IOpcPartUri                   *opcPartUri = NULL;
    IXpsOMPackage                 *xpsPackage = NULL;
    IXpsOMDocumentSequence        *xpsFDS = NULL;
    IXpsOMDocumentCollection      *fixedDocuments = NULL;
    IXpsOMDocument                *xpsFD = NULL;
    IXpsOMPage                    *xpsPage = NULL;
    IXpsOMPageReferenceCollection *pageRefs = NULL;
    IXpsOMPageReference           *xpsPageRef = NULL;
    // These values are set outside of this code example.
    XPS_SIZE pageSize = {width, height}; 
    
    // Create the package.
    hr = xpsFactory->CreatePackage( &xpsPackage );

    // Create the URI for the fixed document sequence part and then  
    //  create the fixed document sequence
    hr = xpsFactory->CreatePartUri( 
        L"/FixedDocumentSequence.fdseq", &opcPartUri );
    hr = xpsFactory->CreateDocumentSequence( opcPartUri, &xpsFDS );
    // Release this URI to reuse the interface pointer.
    if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}

    // Create the URI for the document part and then create the document.
    hr = xpsFactory->CreatePartUri( 
        L"/Documents/1/FixedDocument.fdoc", &opcPartUri );
    hr = xpsFactory->CreateDocument( opcPartUri, &xpsFD );
    // Release this URI to reuse the interface pointer.
    if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}

    // Create a blank page.
    hr = xpsFactory->CreatePartUri( 
        L"/Documents/1/Pages/1.fpage", &opcPartUri );
    hr = xpsFactory->CreatePage(
        &pageSize,                  // Page size
        L"en-US",                   // Page language
        opcPartUri,                 // Page part name
        &xpsPage);                
    // Release this URI to reuse the interface pointer.
    if (NULL != opcPartUri) {opcPartUri->Release(); opcPartUri = NULL;}

    // Create a page reference for the page.
    hr = xpsFactory->CreatePageReference( &pageSize, &xpsPageRef );

    // Add the fixed document sequence to the package.
    hr = xpsPackage->SetDocumentSequence( xpsFDS );

    // Get the document collection of the fixed document sequence
    //  and then add the document to the collection.
    hr = xpsFDS->GetDocuments( &fixedDocuments );
    hr = fixedDocuments->Append( xpsFD );

    // Get the page reference collection from the document
    //  and add the page reference and blank page.
    hr = xpsFD->GetPageReferences( &pageRefs );
    hr = pageRefs->Append( xpsPageRef );
    hr = xpsPageRef->SetPage( xpsPage );

    // Release interface pointer
    if (NULL != xpsPage) xpsPage->Release();
    if (NULL != pageRefs) pageRefs->Release();
    if (NULL != fixedDocuments) fixedDocuments->Release();
    if (NULL != xpsPageRef) xpsPageRef->Release();
    if (NULL != xpsFD) xpsFD->Release();
    if (NULL != xpsFDS) xpsFDS->Release();
    if (NULL != xpsPackage) xpsPackage->Release();

Рекомендации

После использования интерфейса IOpcPartUri для создания компонента (например, после вызова метода CreateDocument в примере кода) отпустите указатель на этот интерфейс, если он не требуется для другого вызова.

Дальнейшие действия

Навигация по OM XPS

Запись текста в OM XPS

Рисование графики в OM XPS

Размещение изображений в OM XPS

Используется на этой странице

IOpcPartUri

IXpsOMObjectFactory

IXpsOMPackage

IXpsOMDocumentSequence

IXpsOMDocumentCollection

IXpsOMDocument

IXpsOMPage

IXpsOMPageReference

IXpsOMPageReferenceCollection

XPS_SIZE

Дополнительные сведения

Инициализация OM XPS

API для упаковки

Справочник по API документов XPS

Спецификация XML-бумаги