Navigieren im XPS-OM
In diesem Thema wird beschrieben, wie Sie in einem XPS-OM navigieren und auf verschiedene Teile des Speicherdokuments zugreifen können.
Die Organisation der XPS-Dokument-API spiegelt die Organisation 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-Webpart |
IXpsOMPage- |
GetVisuals- |
Canvas--Element im FixedPage-Markup |
IXpsOMCanvas |
GetVisuals- |
Path-Element im FixedPage-Markup |
IXpsOMPath- |
Ende der Dokumenthierarchie. |
Glyphen Element 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 in Common XPS Document Programming Tasks.
Codebeispiel
Im folgenden Codebeispiel wird davon ausgegangen, dass ein initialisiertes XPS-OM vorhanden ist, und Paket- verweist auf eine IXpsOMPackage Schnittstelle, die xpS OM darstellt. Informationen zum Erstellen eines XPS-OM finden Sie unter Lesen eines XPS-Dokuments in einem 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();
Verwandte Themen
-
Nächste Schritte
-
auf dieser Seite
-
Weitere Informationen