java使用highchart生成图片并采用freemark导出到word注意事项

1.highchart生成的图片是svg格式的,获取之后转换成输入输出流,转换成base64,将base64替换freemark中需要生成图片的位置,一般是一堆二维码,导出就可以了
2.多个图片的例子: var svg1= chartLogin.getSVG(); var svg2 = chartSelfUser.getSVG();在from中定义一个隐藏域 Id=”svg” name = “svg”
通过$(“#svg”).val(svgLogin+’_’+svgSelfUser);的方式为隐藏域赋值,通过from提交到后台,
3。后台获取数据后,
public void createAndDownload(HttpServletRequest request, HttpServletResponse response,
String cycleStartExport, String svgCode) throws Exception{

    try {
        WordDocumentUtils handler = new WordDocumentUtils();
        //文档设置值
        Map<String,Object> mapData = new HashMap<String,Object>();
        ByteArrayOutputStream array = new ByteArrayOutputStream();
        String svg[] = svgCode.split("_");
        for (int i = 0; i < svg.length; i++) {
            byte[] bytes = HtmlUtils.htmlUnescape(svg[i]).getBytes("UTF-8");
            PNGTranscoder t = new PNGTranscoder();
            TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
            TranscoderOutput output = new TranscoderOutput(array);
            t.transcode(input, output);
            byte[] data = array.toByteArray();
            BASE64Encoder encoder = new BASE64Encoder();
            String img = null;
            if(data!=null && data.length>0){
                img = encoder.encode(data);
            }
            mapData.put("imgStr"+i, img);
        }


        handler.setDataByMap(mapData);
        //Configuration cfg = new Configuration();
        //cfg.setClassicCompatible(true);
        //文档生成名设置
        handler.createDoc(reportTemplate, reportFileName);
        //导出文档
        //handler.download(reportFileName,response);
        download(GlobalConfigure.getWordOutDir(),reportFileName,response,request);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4.freemark中处理${imgStr0!}




需要注意的地方是前台传到后台的< > ” “会自动转换成网页的形式,所以要使用HtmlUtils.htmlUnescape进行转换
项目中需要引入的jar包为xml-apis-ext-1.3.04.jar batik-all-1.7.jar

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Highcharts支持将图表导出为PDF文件。要将多个导出的图表文件合并为一个PDF文件,可以使用一些第三方库或在线服务,例如PDFtk、iLovePDF等。 下面是一些基本的步骤: 1. 使用Highcharts导出图表为PDF文件,并将其保存到本地计算机上或者服务器上。 2. 在代码中使用第三方库或在线服务将每个PDF文件合并为一个文件。 3. 将合并后的PDF文件保存到本地计算机上或者服务器上。 以下是一个使用PDFtk将多个PDF文件合并为一个文件的示例代码: ```javascript // 导出第一个图表为PDF文件 Highcharts.exportCharts({ type: 'application/pdf', filename: 'chart1.pdf', sourceWidth: 600, sourceHeight: 400 }, function (pdf) { // 将第一个PDF文件保存到本地计算机或者服务器上 fs.writeFileSync('chart1.pdf', pdf); // 导出第二个图表为PDF文件 Highcharts.exportCharts({ type: 'application/pdf', filename: 'chart2.pdf', sourceWidth: 600, sourceHeight: 400 }, function (pdf) { // 将第二个PDF文件保存到本地计算机或者服务器上 fs.writeFileSync('chart2.pdf', pdf); // 使用PDFtk将两个PDF文件合并为一个文件 var cmd = 'pdftk chart1.pdf chart2.pdf cat output merged.pdf'; exec(cmd, function (error, stdout, stderr) { if (error) { console.error('Error merging PDF files:', error); } else { console.log('PDF files merged successfully.'); } }); }); }); ``` 在上面的示例代码中,我们首先导出了两个不同的图表为PDF文件,然后使用PDFtk将这两个PDF文件合并为一个文件。最终的结果文件为merged.pdf。请注意,PDFtk需要在服务器上安装,并且可以使用exec命令来执行系统命令。如果需要在客户端浏览器中合并PDF文件,可以考虑使用在线服务,例如iLovePDF等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

begodliker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值