我有一个WPF项目,我们使用一些WindowsForm控件(来自OWC的PivotTable,Office Web Component)。但是,由于数据透视表不能很好地支持打印,我们能想到的唯一方法是打印图像文件数据透视表导出(另一种方法是从导出的Excel文件打印,但我们想避免它,因为它不能保证Excel安装在机器上)。
我们已经有一个打印项目,可以很好地打印WPF ElementFramework
。所以我想使用那段代码。现在我的问题是:如何从代码中生成FrameworkElement
BitmapImage
。由于这个FrameworkElement
纯粹是用于打印,所以我想我必须从代码中创建它,可能会为它分配一个父项,而不是在屏幕上显示它,并且在打印后销毁FrameworkElement
以便最终我可以删除临时BitmapImage
文件。
所以这是我所不知道的。我甚至不知道这是否是一种正确的方法:为一些非UI相关工作创建一个UI元素?有什么建议吗?谢谢!
答案 0 :(得分: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);