精华内容
下载资源
问答
  • linux基础图表

    2017-10-20 16:24:50
    linux基础linux基础linux基础linux基础linux基础linux基础linux基础linux基础linux基础
  • 利用linux特有的grep、awk了可以快速统计,指定时间段的接口出现次数,可能对这个不是熟悉,只能一个一个查看统计,很不方便(后期专供攻inux)。 顺应而为,我去找python linux可以利用grep快速统计TOP sed -n '/30...
  • JFreeChart在linux生成图表时中文乱码,原因是JRE没有找到对应中文字库,解决方法如下:
  • java语言与数据源结合,生成可视化图片,结合echarts 框架 将生成图片写入到word 文档中。 难点:        后台如何生成图片,这是这个需求的难点,通过调研,有许多技术,比如...

    开发需求:
           java语言与数据源结合,生成可视化图片,结合echarts 框架 将生成的图片写入到word 文档中,不采用前台生成等操作。
    难点:
           后台如何生成图片,这是这个需求的难点,通过调研,有许多技术,比如Graphics2D、jfreechart、PhantomJS等等,Graphics2D 生成一些简单的图片比如二维码,海报等等,jfreechart 生成图片比较硬,需要各种调试,当然也可以生成好看的图片,对于懒的我来说,已经不在考虑了。最后决定使用PhantomJS技术来解决这个需求。
    开发过程:
           实现这个技术,需要对这个技术有个初步的了解,在网上各种搜索,其实最后明白就是搭建个服务,我们后台直接请求这个服务生成图片,返回给我们, PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎,供我们请求进行各种操作。
    安装环境:
          下载对应系统地址: http://phantomjs.org/download
          一. window系统:
    在这里插入图片描述
    1.配置环境变量:
    系统 – 高级系统设置 – 环境变量 --系统变量 设置PATH
    在这里插入图片描述
    2.进入我们的cmd 窗口,phantomjs 即可看到效果。
    3.使用一下它们提供的例子:
    phantomjs e:\phantomjs-2.1.1-windows\examples\hello.js
    Hello,world!
    4.说明安装成功。
          二. linux 系统:
    1.解压压缩包:
    tar xjf phantomjs-2.1.1-linux-x86_64.tar.bz2
    2.设置环境变量,并使得配置文件生效:
    export PATH=${PATH}:/opt/phantomjs/bin
    source /etc/profile
    3.phantomjs 即可看到生效
    注意:phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
    解决办法:
    yum install fontconfig freetype2 (yum安装)
    3.使用一下它们提供的例子:
    phantomjs opt\phantomjs\examples\hello.js
    Hello,world!
    4.说明安装成功!
    实现需求:
    java通过连接 phantomjs 来实现后端生成echarts .生成效果如下:
    在这里插入图片描述
    首先 后端封装参数,生成option 通过http 请求得到对应的 图片 base64;
    主要代码:
    option.ftl:

     {
        xAxis: {
            type: 'value',
            show: false
        },
        yAxis: {
            type: 'category',
            data: ${categories},
            splitLine:{
                show: false
            },
            axisLine: {
                show: false
            },
            axisTick:{
                show: false
            },
            axisLabel:{
                fontSize: 14,
                fontFamily:'黑体'
            }
        },
        grid:{
            left: '110px',
            top: '0px',
            right: '60px',
            bottom: '12px'
         },
        color: ${colorValue},
        series: [{
            data: ${values},
            type: 'bar',
            barWidth: '20px',
            label: {
                show: true,
                position: 'right',
                formatter: '{b}',
                color: '#000',
                fontFamily:'黑体'
            }
      }]
    }
    

    EchartsUtils工具类:

    public class EchartsUtil {
        private static  Properties configProperties;
        private static String url;
        private static final String SUCCESS_CODE = "1";
    
    
    
        /**
         *
         * @param option
         * @param width
         * @param height
         * @return
         * @throws ClientProtocolException
         * @throws IOException
         */
        public static String generateEchartsBase64(String option,String width,String height) throws ClientProtocolException, IOException {
            if(StringUtils.isBlank(url)){
                configProperties = SpringContextHolder.getBean("configProperties");
                url = MapUtils.getString(configProperties, "phantomjs.url");
            }
            String base64 = "";
            if (option == null) {
                return base64;
            }
            option = option.replaceAll("\\s+", "").replaceAll("\"", "'");
    
            // 将option字符串作为参数发送给echartsConvert服务器
            Map<String, String> params = new HashMap();
            params.put("opt", option);
            params.put("width",width);
            params.put("height",height);
    
            String response = httpRequestUtils.post(url, params, "utf-8");
    
            // 解析echartsConvert响应
            JSONObject responseJson = JSON.parseObject(response);
            String code = responseJson.getString("code");
    
            // 如果echartsConvert正常返回
            if (SUCCESS_CODE.equals(code)) {
                base64 = responseJson.getString("data");
            }
            // 未正常返回
            else {
                String string = responseJson.getString("msg");
                throw new RuntimeException(string);
            }
    
            return base64;
        }
    }
    

    FreemarkerUtil 工具类:

    public class FreemarkerUtil {
    
        public static String generateString(HttpServletRequest httpRequest, String templateFileName, String templateDirectory, Map<String, Object> datas)
                throws IOException, TemplateException {
            Configuration configuration = new Configuration();
    
            configuration.setDefaultEncoding("UTF-8");
    
            // 设置模板所在文件夹
            String separator = File.separator;
            //如何区分是window 还是 liunx 系统
            String filedownload = "";
            if ("\\".equals(separator)) {
                System.out.println("windows下");
                filedownload = httpRequest.getSession().getServletContext().getRealPath("/WEB-INF/resources/file") + "/";
                filedownload = filedownload.replace("/", "\\");
            }
            // liunx 下
            if ("/".equals(separator)) {
                System.out.println("linux下");
                filedownload = httpRequest.getSession().getServletContext().getRealPath("/WEB-INF/resources/file") + "/" ;
                filedownload = filedownload.replace("\\", "/");
            }
            configuration.setDirectoryForTemplateLoading(new File(filedownload));
            // 生成模板对象
            Template template = configuration.getTemplate(templateFileName);
    
            // 将datas写入模板并返回
            try (StringWriter stringWriter = new StringWriter()) {
                template.process(datas, stringWriter);
                stringWriter.flush();
                return stringWriter.getBuffer().toString();
            }
        }
    

    测试代码块:

    public void getphantomjs(){
            // 变量
            String[] categories = new String[] { "苹果", "香蕉", "西瓜" };
            String[]  color= new String[] {"#008000"};
            Map <String,Object> dataMap=new HashMap<>();
            List dataList = new ArrayList<>();
            dataMap.put("name","B");
            dataMap.put("value",40);
            dataList.add(dataMap);
            dataMap=new HashMap<>();
            dataMap.put("name","AA");
            dataMap.put("value",60);
            dataList.add(dataMap);
            dataMap=new HashMap<>();
            dataMap.put("name","AAA");
            dataMap.put("value",100);
            dataList.add(dataMap);
            Object[] values = dataList.toArray();
            HashMap<String, Object> datas = new HashMap<>();
            //对应option.ftl 变量
            datas.put("categories", JSON.toJSONString(categories));
            datas.put("values", JSON.toJSONString(values));
            datas.put("colorValue",JSON.toJSONString(color));
            String option = null;
            try {
                option = FreemarkerUtil.generateString(getHttpRequest(),"option.ftl", "", datas);
                String base64 = EchartsUtil.generateEchartsBase64(option,"555","96");
                generateImage(base64, "D:\\test.png");
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TemplateException e) {
                e.printStackTrace();
            }
        }
    
    
        public static void generateImage(String base64, String path) throws IOException {
            BASE64Decoder decoder = new BASE64Decoder();
            try (OutputStream out = new FileOutputStream(path)){
                // 解密
                byte[] b = decoder.decodeBuffer(base64);
                for (int i = 0; i < b.length; ++i) {
                    if (b[i] < 0) {
                        b[i] += 256;
                    }
                }
                out.write(b);
                out.flush();
            }
        }
    

    ``
    2019/04/28 新增
      遗留2个问题:
          1. 关于启动 phantomjs
          2. linux 字体安装 生成与window一样的图片

    第一个问题:

    在这里插入图片描述
    打开js 查看
    在这里插入图片描述
    其目的就是启动时加载这个 别人封装好的js插件,传入参数生成想要的结果。
    (默认端口号9090)
    window 启动:

      phantomjs C:\Users\LENOVO\Desktop\安装phantomjs\echartsconvert\echarts-convert.js -s
    

    linux 后台启动:

    nohup phantomjs /opt/phantomjs/echartsconvert/echarts-convert.js -s &
    

    附件echarts-convert.js 下载路径:
    [https://download.csdn.net/download/weixin_38429587/11149428]

    第二个问题:
    Linux系统安装windos字体步骤如下:
    1、复制字体
      在“C:\Windows\Fonts”目录下找到所要安装字体,这里以“SIMHEI.TTF”为例。
    2、上传字体至CentOS系统
      在/usr/share/fonts目录下建立一个子目录,比如/HEITIFONTS. 上传“SIMHEI.TTF”字体至此目录。
    3、进入此目录安装
    cd /usr/share/fonts/HEITIFONTS
    运行以下命令建立字体索引信息,更新字体缓存:
    sudo mkfontscale
    sudo mkfontdir
    sudo fc-cache -fv
    执行以下命令让字体生效
    source /etc/profile
    安装可能遇到的问题与解决办法
    1.权限问题:
    cd /usr/share/fonts/HEITIFONTS
    chmod 755 *.ttf
    2.提示 “ mkfontscale: command not found”,用yum安装: yum install mkfontscale
    提示 “ fc-cache: command not found” yum install fontconfig
    若需要重启服务器: reboot
    查看已安装的字体: fc-list

    总结:
    在开发过程中,还需要进一步更改,封装等等操作,如有疑问,请留言。。。

    展开全文
  • 1.准备一个想要显示的字体文件,这里用宋体(文件simsun.ttf),按照下面步骤添加到jdk中,这样项目就可以调用2.操作:1) 使用SecureCRT连接目标服务器。2) root@fort1:~# cd /usr/local/java/jdk1.8.0_11/jre/lib/...


    1.准备一个想要显示的字体文件,这里用宋体(文件simsun.ttf),按照下面步骤添加到jdk中,这样项目就可以调用

    2.操作:

    1)    使用SecureCRT连接目标服务器。
    2)  root@fort1:~# cd /usr/local/java/jdk1.8.0_11/jre/lib/fonts/
    3)  root@fort1:~# mkdir fallback
    4)  将左面文件simsun.ttf拷贝到fallback目录下。
    5)  root@fort1:~# cd fallback
    6)  root@fort1:~# mkfontscale
    7)  root@fort1:~# mkfontdir
    8) 重新启动tomcat。

    展开全文
  • Echart图表在服务器端生成图片

    千次阅读 2018-05-23 15:55:18
    根据生成的Echart图表获取图表相关信息,chart.getDataURL(),并将相关信息传递给服务器,服务器根据传递的信息生成对应的图片到指定位置 前端代码 //图表实例 var chart= ec.init($(".chart")[0]); /** ...

    根据生成的Echart图表获取图表相关信息,chart.getDataURL(),并将相关信息传递给服务器,服务器根据传递的信息生成对应的图片到指定位置
    前端代码

    //图表实例
    var chart= ec.init($(".chart")[0]);
    /**
     * 导出文件类型 -html excel pdf
     * @param type
     */
    function exportFile(type){
         // 向后台发起请求保存图片到指定目录.
         var param={
                 "downType":type,
                 "picInfo": chart.getDataURL()
         }
         $.ajax({
             type:'post',
             url: ctx+"/*****/saveImage.do?"+csrfName+"="+csrfValue,
             data: param,
             success: function(msg) {
                 console.log(msg)
                 if(msg != "error"){
                        console.log("the file is exit----------------")
                 }else{//文件保存成图片失败
                        console.log("the file is not exit----------------")
    
                 }
             },
             error:function(){
             }
         });
    }

    后端代码:

        /**
         * Echart图片生成
         * @return
         * @throws IOException 
         */
        @RequestMapping(value = "/******/saveImage.do", method = RequestMethod.POST)
        public void saveEchartImage(HttpServletRequest request, HttpServletResponse response) throws IOException{
            String picInfo=request.getParameter("picInfo");
            UUID uuid = UUID.randomUUID();
            String name=uuid.toString();
            String downloadtype=request.getParameter("downType");
            if (StringUtils.isBlank(picInfo)) {
                log.debug("picInfo为空,未从前台获取到base64图片信息!");
                response.getWriter().write("error");
            }else{
                File currpath = new File(getClass().getClassLoader().getResource("").getPath());
                //获取服务器根路径
                File parentPath = new File(currpath.getParent());
                String pppath = parentPath.getParent(); 
                String imgFolder=pppath+ "/imgfile/";
                String imgPath = imgFolder+name+".png" ;//图片存储路径
               log.debug("saveEchartImage img is:"+imgPath);
                // 传递过程中  "+" 变为了 " ".
                String newPicInfo = picInfo.replaceAll(" ", "+");
                decodeBase64(newPicInfo, new File(imgPath));
                //log.warn("从echarts中生成图片的的路径为:{}", picPath);
                response.getWriter().write(name);
            }
        }
    
         /**
         * 解析Base64位信息并输出到某个目录下面.
         * @param base64Info base64串
         * @param picPath 生成的文件路径
         * @return 文件地址
         */
        private File decodeBase64(String base64Info, File picPath) {
            if (StringUtils.isEmpty(base64Info)) {
                return null;
            }
            // 数据中:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABI4AAAEsCAYAAAClh/jbAAA ...  在"base64,"之后的才是图片信息
            String[] arr = base64Info.split("base64,");
            // 将图片输出到系统某目录.
            OutputStream out = null;
            try {
                // 使用了Apache commons codec的包来解析Base64
                byte[] buffer = Base64.decodeBase64(arr[1]);
                out = new FileOutputStream(picPath);
                out.write(buffer);
            } catch (IOException e) {
                //e.printStackTrace();
                log.error("解析Base64图片信息并保存到某目录下出错!", e);
            } finally {
                IOUtils.closeQuietly(out);
            }
            return picPath;
        }

    可以在指定路径查看生成的图片

    展开全文
  • java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术; 图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题; 如下方法可以解决该问题: 在...


    java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术;

    图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中的中文乱码问题;

    如下方法可以解决该问题:

    在项目中加入ttf字体文件;
    代码中通过该字体文件创建Font对象;
    通过该Font对象控制图表中文字样式,即可避免中文乱码,同时,避免项目移植引起的字体样式丢失;
    还有另一种解决方案

    给程序所在的Linux服务器安装相应的字体,这样就不需要在程序包中加入字体文件;
    但,程序移植到其他服务器之后字体样式将丢失;
    以下是从字体文件创建Font的代码:

    private static java.io.File file = null;

    private staticFont font=null;
     
        private static void initFontFile() {
            if (file == null) {
                String vPath = ChartUtil.class.getClassLoader().getResource("").getPath();
                vPath = vPath + File.separator + "fonts" + File.separator + "simhei.ttf";
                file = new java.io.File(vPath);
            }
        }
     
        private static Font getFont(int style, Float size) {
            Font defFont = new Font("黑体", style, 12);

           if(null !=font ) return;
            try {
                initFontFile();
                if (file == null || !file.exists()) {
                    return defFont;
                }
                java.io.FileInputStream fi = new java.io.FileInputStream(file);
                font = Font.createFont(Font.TRUETYPE_FONT, fi);
                fi.close();
                // 这一句需要注意
                // Font.deriveFont() 方法用来创建一个新的字体对象
                font= font.deriveFont(style, size);
                return font;
            } catch (Exception e) {
            }
            return defFont;
        }

     

    展开全文
  • JFreeChart 生成图表linux服务器中文乱码问题 java中用JfreeChart可以生成图表,而不借助于flash,js,canvas等技术; 图表中的文字生成依赖于系统本地字体,但在Linux服务器上,中文字体缺失,进而引起图表中...
  • 生成Echart图,及将图片转换成图片存储到指定路径过程源码 操作过程 1、将文件夹phantomjs复制到指定的路径下,然后在path增加环境变量,我的是\phantomjs 路径为E:\temp\phantomjs\bin,重启eclipse 即可 2、引入...
  • pyecharts在linux下使用phantomjs生成图片后中文乱码及样式问题解决 phantomjs中文乱码解决 centos中文字体安装 pyecharts标题样式 https://blog.csdn.net/wlwlwlwl015/article/de...
  • 但是当放到linux服务器上后,发现生成图表图片是乱码,于是上网查了一下,解决了问题    以下是结合网上朋友的解决方案解决的问题步骤:   这是linux版本JDK/JRE缺乏中文字体(支持)的缘故.    1
  • 1. 下载及说明nmon工具下载地址:http://cznic.dl.sourceforge.net/project/nmon/nmon_linux_14i.tar.gznmon analyser工具下载地址:...
  • 对于一个庞大的项目,如果能搞清楚类的继承关系,并用图示的形式表示出来,那么可能会大大加快对项目的理解...生成配置文件 doxygen -g Doxygen.config 修改配置文件 将配置文件中的下列配置进行修改,其他配置可以按
  • Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
  • 问题背景本地测试环境生成的JFreeChart图表标题正常显示,最初几轮Linux服务器上测试的图表也没有问题。上周无意间发现测试服务器上生成的报表文件中的JFreeChart图表的中文标题是几个框框没有文字,百度说是字体...
  • phantomjs有借鉴有研究。
  • 在windows系统系统下图表中文显示正常,![图片说明](https://img-ask.csdn.net/upload/201711/14/1510626102_634661.jpg)但是部署到linux系统后,中文显示为口![图片说明]...
  • xlsxwriter可能用过的人并不是很多,不过使用后就会感觉,他的功能让你叹服,除了可以按要求生成你所需要的excel外 还可以加上很形象的各种图,比如柱状图、饼图、折线图等。 xlsxwriter 基本用法,创建 xlsx 文件并...
  • generate_excel.vcproj为在vs2005下的工程文件,如果需要在vc6或Linux等其他编译环境下使用只需新建工程将.h文件和.cpp文件导入即可编译。 generate_excel |------include | |----gen_excel_file.h | |----input_...
  • 官方examples例子 4.1 calendar Qt操作Excel生成日历 4.2 chart Qt操作Excel生成图表 4.3 chartsheet Qt操作Excel生成图表 4.4 conditionalformatting Qt操作Excel 条件格式化 4.5 datavalidation Qt操作Excel 数据...
  • 最近需要在linux统计程序运行性能,一般是使用top命令查看程序cpu,mem等信息的。但是老盯着看也不方便,准备把数据写到文件,再进行统计,并绘制成图表,便于分析: 研究了一下,top命令支持几个选项: -b 后台...
  • JFreeChart默认字体有"Arial",...2.或者将Linux系统的字体目录作为JDK下面的一个字体目录连接。 ln -s $FONTS_PATH/FONT_DIR $JAVA_HOME/jre/lib/fonts/fallback 为何要建立fallback目录请参照下面的连接: ...
  • NULL 博文链接:https://haiziwoainixx.iteye.com/blog/870154
  • 项目中用到生成word报表,报表中有表格的合并 、页眉、表格中会有报表图片。然后查找了网上的资料,利用echar生成柱状图,然后已base64串的方式发给后台,在后台解析成字节数组 ,利用poi生成到word文档中。
  • 有一个报告的预览页面,这个页面中含有echarts图表,点击下载报告之后,调用echarts的getDataURL()方法将图片数据传到后台,在后台生成word或者pdf。现在需要定情生成报告,然后将报告通过邮件发送给指定邮箱。 ...
  • java/word+fusionchart生成图表

    千次阅读 2012-11-19 17:57:49
    fusionchart提供了服务端和客户端生成图片的功能,都是基于client端展示了flash以后做的。 朋友的项目是基于linux的,office本身的那套com机制是没办法通过jacob调用了。 纯java的操作word,POI和docx4j,可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,086
精华内容 10,434
关键字:

linux生成图表图片

linux 订阅