zoukankan      html  css  js  c++  java
  • highcharts 的图片变word 文档

    highcharts 的图片变word 文档 需求分析 最近用highcharts 做数据分析,需要将highcharts 形成的图和表单数据形成word 文档

    最终效果:

    思路分两步 1 将highcharts 图片转化为svg 存入后台  

                        2 将图片和表单数据变为word 文档

    ------ 注意:两步分开写方法,否则数据流会导致出错

    1 将highcharts 图片转化为svg 存入后台  

    前台要引入

    <script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
            <script  src="https://img.hcharts.cn/highcharts/highcharts.js" ></script>
            <script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>//-----------必须引入,才能转为svg
            <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js" ></script>

    后台引入

    <!--highcharts  的svg 转化 png-->
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-all</artifactId>
                <version>1.10</version>
            </dependency>
    <!--hightcharts导出图片是解决乱码需要用到的一个包 -->
    <dependency> 
    <groupId>org.lucee</groupId>
    <artifactId>xml-apis-ext</artifactId>
    <version>1.3.04</version>
    </dependency>

    highcharts 容器

    <div id="container" style="min-400px;height:400px"></div>
    
    
    var mychart = Highcharts.chart('container', {
        chart: {
            type: 'column'
        }
    //.......
    }

    2 highcharts 图片转化为svg

    function  topic(){
            var chart = $('#container').highcharts();//获取Highcharts对象
            var svg = chart.getSVG();
            var y =svg.indexOf("style");
            var s =svg.indexOf("xmlns=");
            var a =svg.substring(0,y);
            var b =svg.substring(s,svg.length);
            var c = b.indexOf("<text");
            var d = b.indexOf("</text>");
            var e =b.substring(0,c);
            var f =b.substring(d+7,b.length);
            var k =e+f;
            var str = a+k;
            var  str2=str.replace(/</g,'
    &lt;').replace(/>/g, '&gt;'); 
            alert(str2)
            alert(svg)    
            $("#svg").html(str2);//给form表单textarea赋值
            $("#formEx").submit();//提交form表单
    
            /*$.ajax({
                url:"/"
                ,type:"post"
                ,data:{
                    "chartSVG":chartSVG
                   
                }
                ,success:function (path) {
    
                    alert(path)
                }
            })*/
        }

    这里注意,处理不好会出现以下异常

    org.apache.batik.transcoder.TranscoderException: null
    Enclosed Exception:
    前言中不允许有引用。  

    上述中str2

    svg

    写入表单 为str2  时提交生产图片不会异常,svg 会产生异常
    
    但是当我们用异步 提交, str2 会产生异常,svg 不会产生异常  ---可以测试一下用什么提交才不会发生错误

    后台代码:

    String downloadFilePath = "D:/1.png" ;
        
            //将svg 转化为png  的部分
    
            try {
    
                ConvertToPng.convertToPng(svg, downloadFilePath);//svg转png
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TranscoderException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

    上述代码转换工具类

    package com.highcharts.utils;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.batik.transcoder.TranscoderException;
    import org.apache.batik.transcoder.TranscoderInput;
    import org.apache.batik.transcoder.TranscoderOutput;
    import org.apache.batik.transcoder.image.PNGTranscoder;
    import org.springframework.transaction.TransactionException;
    
    
    
    public class ConvertToPng {
    
        /**
         * @Description: 将svg字符串转换为png
         * @Author:saiSQ
         * @Since: 2013-11-4下午01:36:54
         * @param svgCode
         *            svg代码
         * @param pngFilePath
         *            保存的路径
         * @throws IOException
         *             io异常
         * @throws TranscoderException
         *             svg代码异常
         */
        public static void convertToPng(String svgCode, String pngFilePath)
                throws IOException, TransactionException, TranscoderException {
    
            File file = new File(pngFilePath);
    
            FileOutputStream outputStream = null;
            try {
                file.createNewFile();
                outputStream = new FileOutputStream(file);
                convertToPng(svgCode, outputStream);
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
        /**
         * @Description: 将svgCode转换成png文件,直接输出到流中
         * @Author:saiSQ
         * @Since: 2013-11-4下午01:37:56
         * @param svgCode
         *            svg代码
         * @param outputStream
         *            输出流
         * @throws TranscoderException
         *             异常
         * @throws IOException
         *             io异常
         */
        public static void convertToPng(String svgCode, OutputStream outputStream)
                throws  IOException, TranscoderException {
            try {
                byte[] bytes = svgCode.getBytes("UTF-8");
                PNGTranscoder t = new PNGTranscoder();
                TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
                TranscoderOutput output = new TranscoderOutput(outputStream);
                t.transcode(input, output);
                outputStream.flush();
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
       
    }
  • 相关阅读:
    cnblogs 博客园下载工具
    SQL 排序规则 CodeProject
    SQL 排序规则问题
    Datatbel和 string之间的相互转换
    C#三步实现标准事件处理程序
    利用C#来做ASP.NET的登陆页面
    C#用panel实现子窗体的切换
    C#中split分隔字符串的应用
    C#.NET 用程序画图,曲线图
    C#中消息的工作流程
  • 原文地址:https://www.cnblogs.com/jsbk/p/9483850.html
Copyright © 2011-2022 走看看