0

我有一个 WPF 项目,我们使用一些 WindowsForm 控件(来自 OWC 的数据透视表,Office Web 组件)。但是,由于数据透视表不太支持打印,我们能想到的唯一方法是打印数据透视表导出的图像文件(另一种方法是从导出的 Excel 文件中打印,但我们希望避免它,因为它不能保证机器上安装了 Excel)。

我们已经有一个打印项目,可以ElementFramework很好地打印 WPF。所以我想使用那段代码。现在我的问题是:如何从代码中生成FrameworkElementa 。BitmapImage由于这FrameworkElement纯粹是为了打印,所以我想我必须从代​​码中创建它,可能为它分配一个父级,而不是在屏幕上显示它,并且在打印后销毁它,FrameworkElement以便最终我可以删除临时BitmapImage文件。

所以这超出了我的认知。我什至不知道这是否是正确的方法:为一些非 UI 相关的工作创建一个 UI 元素?对此有何建议?谢谢!

4

1 回答 1

0

您应该将临时图像文件的字节加载到内存中并Image从这些字节创建一个。您Image不会直接使用临时文件,您可以在读取字节后立即将其删除,剩下的就是GarbageCollector's工作。这是一个创建您BitmapImage的字节的函数:

        public static BitmapImage GetImageFromByteArray(byte[] rawImageBytes)
        {
            BitmapImage imageSource = null;

            try
            {
                using (MemoryStream stream = new MemoryStream(rawImageBytes))
                {
                    stream.Seek(0, SeekOrigin.Begin);
                    BitmapImage bi = new BitmapImage();
                    bi.BeginInit();
                    bi.CacheOption = BitmapCacheOption.OnLoad;
                    bi.StreamSource = stream;
                    bi.EndInit();
                    imageSource = bi;
                }
            }
            catch (System.Exception)
            {
            }

            return imageSource;
        }

并像这样使用它: testImage.Source = GetImageFromByteArray(rawImageBytes);

于 2013-05-24T10:52:37.100 回答