BSTEK Development Framework2(BDF2) : 16.BDF2-SWFVIEWER

       bdf2-swfviewer是BDF2提供的一个标准的Dorado Addon,可以在线显示flash动画,同时提供了一个flash形式的小插件,可实现报表的在线预览与打印。

       要使用 bdf2-swfviewer模块,我们可以到nexus.bsdn.org上下载最新的 bdf2-swfviewer模块的jar,或者可以到我们提供的在线创建项目向导中选择 bdf2-swfviewer模块并下载即可;同样,如果您采用的是Maven来管理项目,那么只需要将 bdf2-swfviewer模块的依赖信息加到我们的pom.xml当中即可:

bdf2-swfviewer模块依赖
<dependency>
  <groupId>com.bstek.bdf2</groupId>
  <artifactId>bdf2-swfviewer</artifactId>
  <version>2.0.0</version>
</dependency>

添加完成 bdf2-swfviewer模块后,启动项目工程,在线更新Dorado配置规则文件,更新完成之后,打开一个view,可以在工具栏当中看到如下图所示组件图标:

SwfViewer控件关键属性如下所示;

属性名类型默认值属性描述
swfUrlString如果不指定值,采用默认的url处理dorado/bdf2/swfviewer/swfFile.do
handlerNameString配合服务端处理类,动态指定swf文件资源位置,需要定义一个类实现com.bstek.bdf2.swfviewer.handler.ISwfFileHandler接口
parameterString服务端处理类可以接受的参数值
showTypeStringcomplex显示类型,可选值simple、complex
printEnabledbooleantrue是否显示打印按钮

在线显示flash动画

 在view文件中添加一个SwfViewer控件,指定一个swf资源文件,如下配置所示:

<SwfViewer id="swfViewerTest">     
   <Property name="showType">simple</Property>
    <Property name="swfUrl">dorado/res/com/test/black_clock.swf</Property>
</SwfViewer>

这样一个简单的配置就完成了,页面运行效果如下图所示:

在线预览和打印

在线预览和打印需要需要将pdf文件通过服务端动态生成swf格式的文件,因此需要安装swftools,swftools提供了一个名为pdf2swf的工具,可以将pdf文件转换成swf文件。swftools的安装配置可以参考bdf1中的相关文档: 6.1.安装与配置SWFTOOLS

安装swftools的目录不能包含空格,否则无法转换pdf文件!

安装完成swftools之后,需要在dorado-home/configure.properties文件中指定swftools的安装目录和对应的xpdfpath安装目录。

window系统用户可能的配置如下,

bdf2.swfviewer.pdfToSwf=D:/mysoft/swftools/pdf2swf.exe
bdf2.swfviewer.xpdfPath=D:/mysoft/xpdf-chinese-simplified

Linux系统用户可能配置如下,

bdf2.swfviewer.pdfToSwf=/usr/bin/pdf2swf
bdf2.swfviewer.xpdfPath=/usr/share/xpdf-chinese-simplified

对指定的pdf文件实现在线预览功能,服务端需要实现com.bstek.bdf2.swfviewer.handler.ISwfFileHandler接口,实现类代码如下所示:

package com.test;
import java.io.File;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.bstek.bdf2.swfviewer.controller.PdfToSwfConverter;
import com.bstek.bdf2.swfviewer.handler.ISwfFileHandler;
@Component
public class TestPdfToSwfHandler implements ISwfFileHandler {
	public String getHandlerName() {
		return "test.pdf2swfHandler";
	}
	public String getHandlerDesc() {
		return "在线预览打印pdf文件";
	}
	public File execute(Map<String, Object> varMap) throws Exception {
		System.out.println(varMap.get("testParameter1"));
		System.out.println(varMap.get("testParameter2"));
		File pdfFile = new File("d:/UserInfo.pdf");
		String sourcePdf = pdfFile.getAbsolutePath();
		PdfToSwfConverter pdfToSwfConverter = new PdfToSwfConverter();
		String swf = pdfToSwfConverter.execute(sourcePdf, null);
		return new File(swf);
	}
}

SwfViewer控件需要设置的代码示例如下,

swfViewer.set("handlerName","test.pdf2swfHandler");
swfViewer.set("parameter",{
	testParameter1:"test1",
	testParameter2:"test2"
});
swfViewer.refreshSwf();

通过服务端编写实现类转换pdf为swf文件,在view界面通过SwfViewer控件显示运行效果如下:

点击右上角的打印机图标,即可实现打印功能,如下图所示:

如果访问界面出现如下提示,表示当前浏览器没有安装Adobe Flash Player,请下载安装最新的Adobe Flash Player即可:

Attachments:

swfviewer.png (image/png)
swf.png (image/png)
swfComplex.png (image/png)
print.png (image/png)
no_flash_player.png (image/png)