本主题介绍如何在 XPS OM 中使用 XPS 文档 API 的画布相关接口。
| 接口名称 | 逻辑子接口 | 说明 |
|---|---|---|
| IXpsOMVisual |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
定义视觉对象(如文本和图形)的接口的基类。 可以在 IXpsOMVisualCollection 接口中收集视觉对象。 |
| IXpsOMCanvas |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
可被视为单个视觉对象的视觉对象的集合。 |
IXpsOMVisual 是基接口;页面的可见对象继承自该页面。 IXpsOMCanvas 继承自 IXpsOMVisual ,并使许多其他视觉元素可以分组并作为单个视觉元素执行作。 例如,可以使用 IXpsOMCanvas 接口创建包含文本和图形元素集合的页面横幅。 此类横幅可能包含徽标、公司口号和公司地址。 可以将所有这些元素放入 IXpsOMCanvas 接口的 IXpsOMVisualCollection 中,然后将单个转换应用到 IXpsOMCanvas 对象以将其调整为特定页面。 这比计算和将转换应用于横幅中的每个单个视觉组件要简单得多。
还可以使用画布调整页面内容的大小以适应当前页大小。 为此,请将页面的所有内容放入单个画布中,然后应用相应的转换以将画布适应当前页大小。 这比尝试调整页面中视觉对象集合中每个视觉元素的大小要简单得多。
将页面内容移动到画布
下面的代码示例将页面的内容移动到画布。
HRESULT hr = S_OK;
IXpsOMVisualCollection *pageVisuals;
IXpsOMVisualCollection *canvasVisuals;
IXpsOMVisual *oneVisual;
IXpsOMCanvas *newPageCanvas;
UINT32 numVisuals = 0;
UINT32 thisVisual;
// get the page's visual collection
// and how many objects it contains
hr = page->GetVisuals( &pageVisuals );
hr = pageVisuals->GetCount ( &numVisuals );
// create the new canvas object and
// its (empty) visual collection
hr = xpsFactory->CreateCanvas ( &newPageCanvas );
hr = newPageCanvas->GetVisuals ( &canvasVisuals );
// go through the page's list of visual objects,
// move each one from the page's list to the canvas' list
// release the local pointer
// remove it from the page's collection
thisVisual = 0;
while (thisVisual < numVisuals) {
hr = pageVisuals->GetAt (0, &oneVisual);
hr = canvasVisuals->Append (oneVisual);
hr = pageVisuals->RemoveAt (0);
thisVisual++;
}
// the page's visual collection should be empty
hr = pageVisuals->GetCount (&numVisuals);
_ASSERT (0 == numVisuals);
// add the new canvas to the page's visual collection
pageVisuals->Append ( newPageCanvas );
相关主题
- [**IXpsOMCanvas Interface**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
- [**IXpsOMVisual Interface**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
- [**IXpsOMVisualCollection Interface**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)