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控件关键属性如下所示;
属性名 | 类型 | 默认值 | 属性描述 |
swfUrl | String | 空 | 如果不指定值,采用默认的url处理dorado/bdf2/swfviewer/swfFile.do |
handlerName | String | 空 | 配合服务端处理类,动态指定swf文件资源位置,需要定义一个类实现com.bstek.bdf2.swfviewer.handler.ISwfFileHandler接口 |
parameter | String | 空 | 服务端处理类可以接受的参数值 |
showType | String | complex | 显示类型,可选值simple、complex |
printEnabled | boolean | true | 是否显示打印按钮 |
在线显示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之后,需要在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",
testParameter1:"test2"
});
swfViewer.refreshSwf();
通过服务端编写实现类转换pdf为swf文件,在view界面通过SwfViewer控件显示运行效果如下:
点击右上角的打印机图标,即可实现打印功能,如下图所示: