Naviguer dans le modèle d’administration XPS
Cette rubrique explique comment naviguer dans un modèle de gestion XPS et accéder à différentes parties du document en mémoire.
Le organization de l’API document XPS reflète la organization d’un document XPS. Le tableau suivant montre comment les interfaces de l’API document XPS sont liées aux composants d’un document XPS.
Composant de document XPS | Interface d’API de document XPS | Méthode à appeler pour le niveau suivant vers le bas dans la hiérarchie |
---|---|---|
Fichier de document XPS (contient le package OPC) |
IXpsOMPackage |
GetDocumentSequence |
Composant FixedDocumentSequence |
IXpsOMDocumentSequence |
GetDocuments |
Composant FixedDocument |
IXpsOMDocument |
GetPageReferences |
Élément PageContent dans le balisage FixedDocument |
IXpsOMPageReference |
GetPage CollectPartResources |
Composant FixedPage |
IXpsOMPage |
GetVisuals |
Élément Canvas dans le balisage FixedPage |
IXpsOMCanvas |
GetVisuals |
Élément Path dans le balisage FixedPage |
IXpsOMPath |
Fin de la hiérarchie de documents. |
Élément Glyphes dans le balisage FixedPage |
IXpsOMGlyphes |
Fin de la hiérarchie de documents. |
Partie police |
IXpsOMFontResource |
Fin de la hiérarchie de documents. |
Partie Image |
IXpsOMImageResource |
Fin de la hiérarchie de documents. |
Avant d’utiliser les exemples de code suivants dans votre programme, lisez la clause de non-responsabilité dans Tâches de programmation de documents XPS courantes.
Exemple de code
L’exemple de code suivant suppose l’existence d’un om XPS initialisé, et le package pointe vers une interface IXpsOMPackage qui représente ce modèle d’utilisation XPS. Pour plus d’informations sur la création d’un modèle d’utilisation XPS, consultez Lire un document XPS dans un om XPS ou Créer un modèle d’utilisation XPS vide.
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();
Rubriques connexes
-
Next Steps
-
Utilisé dans cette page
-
Pour plus d’informations