使用 XPS OM 画布和视觉对象接口

本主题介绍如何在 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 接口**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
[**IXpsOMVisual 接口**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
[**IXpsOMVisualCollection 接口**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)