WPF如何将FlowDocument BGImage转换为FixedDocument并在DocumentViewer中显示它?

时间:2015-03-12 23:02:14

标签: c# wpf

我有一个带背景图像的FlowDocument。目前它在FlowDocumentReader中无法正确显示,因为当文档向上和向下滚动时背景图像保持居中。如何将此FlowDocument转换为FixedDocument并在DocumentViewer中显示它,因此背景图像也将被修复?

我使用here中的转换逻辑。但它不显示FlowDocument.Background图像。

    private FixedDocument convert(FlowDocument flowDocument)
    {
        if (flowDocument == null)
            return null;
        var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
        var package = Package.Open(new MemoryStream(), FileMode.Create, FileAccess.ReadWrite);
        var packUri = new Uri("pack://temp.xps");
        PackageStore.RemovePackage(packUri);
        PackageStore.AddPackage(packUri, package);
        var xps = new XpsDocument(package, CompressionOption.NotCompressed, packUri.ToString());
        XpsDocument.CreateXpsDocumentWriter(xps).Write(paginator);
        FixedDocument doc = xps.GetFixedDocumentSequence().References[0].GetDocument(true);
        return doc;
    }

1 个答案:

答案 0 :(得分:1)

你写了

  

我有一个带背景图像的FlowDocument。目前它在FlowDocumentReader中无法正确显示,因为当文档向上和向下滚动时背景图像保持居中。

不完全是您的具体问题的答案,但要避免这种情况,请将ImageBrush.ViewportUnits设置为BrushMappingMode.Absolute。然后,将ImageBrush.Viewport设置为背景图片的所需尺寸:

        <FlowDocumentReader ViewingMode="Scroll">
            <FlowDocument>
               <FlowDocument.Background>
                    <ImageBrush TileMode="Tile" Stretch="Fill" Viewport="0,0,1000,400" ViewportUnits="Absolute">
                        <ImageBrush.ImageSource>
                            <!--Image source here...-->
                        </ImageBrush.ImageSource>
                    </ImageBrush>

可选择将ImageBrush.Stretch设置为Stretch.Fill以使用您的图片填充指定的视口,并将ImageBrush.TileMode设置为TileMode.Tile以重复显示背景图片。