Создание пустой 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 в примере кода) отпустите указатель на этот интерфейс, если он не требуется для другого вызова.
См. также
-
Дальнейшие действия
-
Используется на этой странице
-
Дополнительные сведения