请选择 进入手机版 | 继续访问电脑版

Aic-tech BBS

 找回密码
 立即注册

扫一扫,访问微社区

搜索
查看: 743|回复: 0

关于如何再FlowDocument中实现图表展示

[复制链接]

15

主题

25

帖子

431

积分

超级版主

Rank: 8Rank: 8

积分
431
发表于 2018-7-18 14:20:17 | 显示全部楼层 |阅读模式

(本文转自艾克汪工)

1方案背景

FlowDocument是一种文件流文件,通过学习它的相关知识可以知道,FlowDocument是可以展示图片的,但是在实际使用中却发现,类似于Telerik系列的Chart控件无法在FlowDocument中显示出来,那么,我们是不是可以换一个角度来思考这个问题,我们先把Chart控件图表显示的效果裁剪成一张图片,然后在FlowDocument中显示。
2    如何实现将Chart图片裁剪成一张图片

  首先,using System.Windows.Media.Imaging命名空间下存在类PngBitmapEncoder,它可实现指定区域裁剪成一张图片,所以我们实现建立一个Grid,这个Grid中包含Chart和它的Legend,然后定义它的Width和Height,在程序中进行裁剪。
  第一步:建立Grid
                              
  第二步:给这个Grid进行裁剪(其中grid为具体的Grid的对象,i作为第几个Grid的一个参数,用于需要生成多个图片时命名的区分)
  第三步:此时图片就保存在了C盘的指定路径下了。
主要问题的处理:
  当裁剪图片的Grid区域在界面设计时不能一直显示在前台的情况下裁剪失败的问题。
  说明:当前的图片裁剪要正常实现的规则时,裁剪时Grid必须在当前界面最前显示中,否则Chart默认是未刷新内容数据,导致Grid裁剪并非准确内容。
  采取措施:对这个Grid区域在裁剪之前显示,然后运行裁剪程序完成后,隐藏掉Grid区域。
  如图:
3    FlowDocument中添加图片
当前如何使用FlowDocument结构来创建工程页面这里就不介绍了,大家可自行查找参考书的内容介绍(公司人员可参考具体代码实现)。
这里主要介绍使用中的注意事项:
1、 生成FlowDocument文件带入能获取到图片的参数,此处为图片名。(当前代码结构可自定义,无需参考本人提供的样式)
生成文件流时,将图片的保存路径或者图片的名称作为一个参数传输到FlowDocument中,
2、 FlowDocument使用图片
第一步:FlowDocument中创建一个Image区域
  第二步:给Image创建Source
  这里有一个需要注意的地方:图片必须使用Stream的形式,先把图片加载缓存成2进制数据,然后当做数据源传输给Image,而不能把路径直接赋值给Image。这会产生一个占用的问题,如果你想FlowDocument再刷新一次图片就会报错,提示当前图片占用中,无法修改。所以推荐ImageSource使用Stream形式赋值。
4    总结
以上即为在FlowDocument中增加图表的内容实现,现在使用FlowDocument来生成打印的PDF文件是很常见的方式,但是很多人苦于Chart图表无法打印而设计此方案,这里给大家提供一个比较简单的方案,希望能对大家有所帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
决策远比执行要难得多……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Beijing Advanced Information and Control Co. Ltd.

GMT+8, 2019-11-20 15:25 , Processed in 0.168004 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表