用户希望不预览模板可以直接输出 HTML 报表,比如说在系统中点击某个按钮时就可以直接输出离线 HTML 报表,而不是一定要打开该张报表然后再输出,此时该如何操作呢?
安装 输出离线HTML报表 插件后,FineReport 支持不预览模板直接输出 HTML 报表,即通过 URL 直接输出,FR不仅支持单个报表的 HTML 输出,同时也支持批量导出多个离线 HTML 报表,直接在填报预览报表的 URL 后面增加&format=write_html,既可以通过模板导出为离线 HTML,导出名称为报表名称,也可以 重命名。
我们这里仍然以模板%FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\form\主从表多源填报.cpt为例。
3.1 启动内置服务器
打开设计器,随便打开预览一张模板,或者访问服务器管理平台,启动内置服务器。
3.2 单个模板 URL 导出 HTML
URL 直接输出离线 HTML 报表,只需要在填报预览报表的 URL 后面直接添加 format 参数等于 write_html 即可,如下:
http://localhost:8075/webroot/decision/view/report?viewlet=demo%2Fform%2F%5B4e3b%5D%5B4ece%5D%5B8868%5D%5B591a%5D%5B6e90%5D%5B586b%5D%5B62a5%5D.cpt&op=write&format=write_html
注:离线导出 HTML是指填报预览的模式下,故必须加上op=write。
在浏览器中输入上述代码,回车即可导出离线 HTML,如下图:
注:如果需要传递参数请直接在 URL 后面添加 &参数名=参数值。
3.3 多个模板批量导出 HTML
上面介绍了单个模板 URL 直接导出 HTML,那么当有多个模板需要批量导出的时候,又该如何操作呢?我们将模板和参数按照如下格式传递过去即可:
http://localhost:8075/webroot/decision/view/report?viewlet=({reportlet:xxx.cpt,paraname1:paravalue1,paraname2:paravalue2,...},{reportlet:xxx.cpt,paraname1:paravalue1,paraname2:paravalue2,...},{...})&op=write&format=write_html
注:paraname1:paravalue1,是指导出各模板内容时,对应的参数名和参数值,多个参数中间用逗号隔开。
比如说我们需要将
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\form\主从表多源填报.cpt%FR_HOME%\webapps\webroot\WEB-INF\reportlets\demo\form\客户跟踪数据回填.cpt
两个模板批量导出,并给“主从表多源填报(离线填报)”这个模板传递一个参数,如下代码,在一个 HTML 中定义一个按钮,点击按钮就导出上面 2 张模板的离线 HTML:
<html>
<head>
<title>FineReport自定义导出</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="/webroot/decision/view/report?op=emb&resource=finereport.js"></script>
</head>
<body>
<button type="button" onclick="window.open(FR.cjkEncode('/webroot/decision/view/report?viewlet=({reportlet:/demo/form/主从表多源填报(离线填报).cpt,company:52171d25-8e01-4529-b4f7-00eff6326713},{reportlet:demo/form/客户跟踪数据回填.cpt})'+'&op=write'+'&format=write_html'))">输出离线html</button>
</body>
</html>
注:如果有中文参数,则需要引入 finereport.js,并进行转码,如果需要重命名可以在后面加上 &__filename__=名称。
导出的压缩包名称为最后一个模板的名称,将压缩包解压出来,可以得到两个模板的离线 HTML 文件夹:
若想批量导出为其他格式可参考 自定义批量导出