Navigieren im XPS-OM
In diesem Thema wird beschrieben, wie Sie durch ein XPS-OM navigieren und auf verschiedene Teile des In-Memory-Dokuments zugreifen.
Die organization der XPS-Dokument-API spiegelt die organization eines XPS-Dokuments wieder. In der folgenden Tabelle wird veranschaulicht, wie sich die Schnittstellen der XPS-Dokument-API auf die Komponenten eines XPS-Dokuments beziehen.
XPS-Dokumentkomponente | XPS-Dokument-API-Schnittstelle | Methode zum Aufrufen der nächsten Ebene in der Hierarchie |
---|---|---|
XPS-Dokumentdatei (enthält OPC-Paket) |
IXpsOMPackage |
GetDocumentSequence |
FixedDocumentSequence-Teil |
IXpsOMDocumentSequence |
GetDocuments |
FixedDocument-Teil |
IXpsOMDocument |
GetPageReferences |
PageContent-Element im FixedDocument-Markup |
IXpsOMPageReference |
GetPage CollectPartResources |
FixedPage-Teil |
IXpsOMPage |
GetVisuals |
Canvas-Element im FixedPage-Markup |
IXpsOMCanvas |
GetVisuals |
Path-Element im FixedPage-Markup |
IXpsOMPath |
Ende der Dokumenthierarchie. |
Glyphenelement im FixedPage-Markup |
IXpsOMGlyphen |
Ende der Dokumenthierarchie. |
Schriftartteil |
IXpsOMFontResource |
Ende der Dokumenthierarchie. |
Bildteil |
IXpsOMImageResource |
Ende der Dokumenthierarchie. |
Bevor Sie die folgenden Codebeispiele in Ihrem Programm verwenden, lesen Sie den Haftungsausschluss unter Allgemeine XPS-Dokumentprogrammierungsaufgaben.
Codebeispiel
Im folgenden Codebeispiel wird davon ausgegangen, dass eine initialisierte XPS-OM vorhanden ist, und das Paket verweist auf eine IXpsOMPackage-Schnittstelle , die diese XPS OM darstellt. Informationen zum Erstellen eines XPS-OM finden Sie unter Lesen eines XPS-Dokuments in ein XPS-OM oder Erstellen eines leeren XPS-OM.
HRESULT hr = S_OK;
IXpsOMDocumentSequence *docSeq = NULL;
IXpsOMDocumentCollection *docs = NULL;
IXpsOMDocument *doc = NULL;
IXpsOMPageReferenceCollection *pages = NULL;
IXpsOMPageReference *pageRef = NULL;
IXpsOMPage *page = NULL;
IXpsOMCanvas *canvas = NULL;
IXpsOMPath *path = NULL;
IXpsOMPartResources *pageParts = NULL;
IXpsOMGlyphs *glyphs = NULL;
IXpsOMFontResourceCollection *fonts = NULL;
IXpsOMFontResource *font = NULL;
IXpsOMImageResourceCollection *images = NULL;
IXpsOMImageResource *image = NULL;
IXpsOMVisualCollection *visuals = NULL;
IXpsOMVisual *visual = NULL;
UINT32 numDocs = 0;
UINT32 thisDoc = 0;
UINT32 numPageRefs = 0;
UINT32 thisPageRef = 0;
UINT32 numVisuals = 0;
UINT32 thisVisual = 0;
UINT32 numFonts = 0;
UINT32 thisFont = 0;
UINT32 numImages = 0;
UINT32 thisImage = 0;
XPS_OBJECT_TYPE visualType;
// 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 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 page content of this page reference.
{
hr = pageRef->GetPage (&page);
// Get the visual tree of this page.
hr = page->GetVisuals (&visuals);
// Walk the visuals.
hr = visuals->GetCount (&numVisuals);
thisVisual = 0;
while (thisVisual < numVisuals) {
hr = visuals->GetAt (thisVisual, &visual);
// Get visual type.
hr = visual->GetType( &visualType );
// Do other stuff with the visual.
// Release the visual.
if (NULL != visual) {visual->Release(); visual = NULL;}
thisVisual++; // Get next visual in collection.
}
if (NULL != visuals) {visuals->Release(); visuals = NULL;}
if (NULL != page) {page->Release(); page = NULL;}
}
// Get the part resources used by this page.
hr = pageRef->CollectPartResources (&pageParts);
// Get the font resources.
{
hr = pageParts->GetFontResources (&fonts);
// Walk the fonts.
hr = fonts->GetCount (&numFonts);
thisFont = 0;
while (thisFont < numFonts) {
hr = fonts->GetAt(thisFont, &font);
if (NULL != font) {font->Release(); font = NULL;}
thisFont++; // Get the next font in collection.
}
if (NULL != fonts) {fonts->Release(); fonts = NULL;}
}
// Get the image resources.
{
hr = pageParts->GetImageResources (&images);
// walk the images
hr = images->GetCount (&numImages);
thisImage = 0;
while (thisImage < numImages) {
hr = images->GetAt(thisImage, &image);
thisImage++;
if (NULL != image) {image->Release(); image = NULL;}
}
if (NULL != images) {images->Release(); images = NULL;}
}
if (NULL != pageRef) {pageRef->Release(); pageRef = NULL;}
thisPageRef++; // Get next page in doc.
}
if (NULL != pages) {pages->Release(); pages = NULL;}
if (NULL != doc) {doc->Release(); doc = NULL;}
thisDoc++; // Get next doc in collection.
}
// Release interface pointers.
if (NULL != docs) docs->Release();
if (NULL != docSeq) docSeq->Release();
Zugehörige Themen
-
Next Steps
-
Wird auf dieser Seite verwendet
-
Weitere Informationen