Esplorare XPS OM
In questo argomento viene descritto come spostarsi in un file XPS OM e accedere a parti diverse del documento in memoria.
L'organizzazione dell'API documento XPS rispecchia l'organizzazione di un documento XPS. Nella tabella seguente viene illustrato il modo in cui le interfacce dell'API documento XPS sono correlate ai componenti di un documento XPS.
Componente documento XPS | Interfaccia DELL'API documento XPS | Metodo per chiamare il livello successivo verso il basso nella gerarchia |
---|---|---|
File di documento XPS (contiene il pacchetto OPC) |
IXpsOMPackage |
GetDocumentSequence |
Parte FixedDocumentSequence |
IXpsOMDocumentSequence |
GetDocuments |
Parte FixedDocument |
IXpsOMDocument |
GetPageReferences |
Elemento PageContent nel markup FixedDocument |
IXpsOMPageReference |
GetPage CollectPartResources |
Parte FixedPage |
IXpsOMPage |
GetVisuals |
Elemento Canvas nel markup FixedPage |
IXpsOMCanvas |
GetVisuals |
Elemento Path nel markup FixedPage |
IXpsOMPath |
Fine della gerarchia dei documenti. |
Elemento Glyphs nel markup FixedPage |
IXpsOMGlyphs |
Fine della gerarchia dei documenti. |
Parte tipo di carattere |
IXpsOMFontResource |
Fine della gerarchia dei documenti. |
Parte immagine |
IXpsOMImageResource |
Fine della gerarchia dei documenti. |
Prima di usare gli esempi di codice seguenti nel programma, leggere la dichiarazione di non responsabilità nelle attività comuni di programmazione documenti XPS.
Esempio di codice
Nell'esempio di codice seguente si presuppone l'esistenza di un file XPS OM inizializzato e il pacchetto punta a un'interfaccia IXpsOMPackage che rappresenta tale OM XPS. Per informazioni sulla creazione di un file XPS OM, vedere Leggere un documento XPS in un XPS OM o Creare un XPS OM vuoto.
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();
Argomenti correlati
-
Passaggi successivi
-
Utilizzato in questa pagina
-
Ulteriori informazioni