使用 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)