方案一 将数据拼接成HTML字符串报道到指定地址,读取html转成base64Img数据

1>将字符串转成HTML并保持

String str="<!DOCTYPE html>\n" +"<html>\n" +"\n" +"<head>\n" +"    <meta charset=\"utf-8\" />\n" +"    <title>Echarts</title>\n" +"</head>\n" +"\n" +"<body>\n" +"    <div style=\"width: 650px\">\n" +"        <div style=\"width: 600px;margin: 0 auto;font-size: 10px;\">\n" +"            <div style=\"text-align: center;border-bottom: 1px dashed #000;line-height: 30px;font-size: 12px;\">\n" +"                临时住宿人员信息表\n" +"            </div>\n" +"            <p>流水号:<span>NS305152520190201150134</span></p>\n" +"            <div style=\"text-align: center\">\n" +"                <img src=\"https://ss1.bdstatic.com/5aAHeD3nKgcUp2HgoI7O1ygwehsv/media/ch1000/png/pct1.png\" alt=\"\" style=\"width:580px;height:auto;text-align: center\">\n" +"            </div>\n" +"            <div style=\"height:1px;border-top: 1px dashed #000;\"></div>\n" +"            <table style=\"width:580px;margin: 0 auto;line-height: 20px;\">\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">姓名</td>\n" +"                    <td style=\"text-align: right\">XXX</td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">身份号码</td>\n" +"                    <td style=\"text-align: right\">XXXXX</td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">性别</td>\n" +"                    <td style=\"text-align: right\">男</td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">民族</td>\n" +"                    <td style=\"text-align: right\">XXX\n" +"                        <img style=\"height:15px;position: relative;top:3px;\" src=\"XXXXXXX\">\n" +"                    </td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">联系电话</td>\n" +"                    <td style=\"text-align: right\">\n" +"                        XXXXXXX\n" +"                        <img style=\"height:15px;position: relative;top:3px;\" src=\"XXXXXXXX">\n" +"                    </td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">常住地址</td>\n" +"                    <td style=\"text-align: right\">北京市昌平区\n" +"                        <img style=\"height:15px;position: relative;top:3px;\" src=\"XXXXXX">\n" +"                    </td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">入住酒店</td>\n" +"                    <td style=\"text-align: right\">\网证体验中心</td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">入住房号</td>\n" +"                    <td style=\"text-align: right\">458</td>\n" +"                </tr>\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">入住时间</td>\n" +"                    <td style=\"text-align: right\">2019.02.01-2019.02.02</td>\n" +"                </tr>\n" +"            </table>\n" +"            <div style=\"height:1px;border-top: 1px dashed #000;\"></div>\n" +"            <p>广州市公安局南沙分局</p>\n" +"            <table style=\"width:580px;margin: 0 auto;line-height: 20px;\">\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">打印时间<span>2019.02.01 03-01</span></td>\n" +"                    <td style=\"text-align: right\">经办:<span>XXX</span></td>\n" +"                </tr>\n" +"            </table>\n" +"            <div style=\"height:1px;border-top: 1px dashed #000;\"></div>\n" +"            <p>注:</p>\n" +"            <p>1、酒店需与派出所核对住宿人员信息;</p>\n" +"            <p>2、仅在同一酒店一次性住宿使用(可连续住宿多天,退房/复印无效);</p>\n" +"            <p>3、此件由酒店每月初交回派出所,复印订装备份</p>\n" +"            <div style=\"height:1px;border-top: 1px dashed #000;\"></div>\n" +"            <table style=\"width:580px;margin: 0 auto;line-height: 20px;\">\n" +"                <tr>\n" +"                    <td style=\"text-align: left\">经办人签名:</td>\n" +"                    <td style=\"text-align: right\"><image style=\"height:20px;\" src=\"\"></image></td>\n" +"                </tr>\n" +"            </table>\n" +"            <div style=\"height:1px;border-top: 1px dashed #000;\"></div>\n" +"        </div>\n" +"    </div>\n" +"</body>\n" +"\n" +"</html>";//String path=request.getServletContext().getRealPath("/");File file=new File("./a.html");BufferedWriter bw=null;try {bw=new BufferedWriter(new FileWriter(file,true));bw.write(str);bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}

2> 读取HTML并转换成Base64

 ImageRenderer render = new ImageRenderer();String url = "file:///C:/Users/Lenovo/Desktop/a.html";File file;InputStream inputStream = null;byte[] data = null;try {//创建一个临时文件file = File.createTempFile("temp", ".png");//将html转为pngFileOutputStream out = new FileOutputStream(file);render.renderURL(url, out, ImageRenderer.Type.PNG);//字节流读取pnginputStream = new FileInputStream(file);data = new byte[inputStream.available()];inputStream.read(data);out.close();inputStream.close();file.deleteOnExit();} catch (Exception e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();//删除所有空格,换行,解决base解码出现中文乱码String dat1a = encoder.encode(data).replaceAll("\n", "").replaceAll("\r", "");log.info(dat1a);

方案二 将数据拼转换成Io流程保存到ftp,读取ftp转成base64Img数据

1>将数据导入模板,上传ftp并解析

(这里模板就用上面的就好)

long data=System.currentTimeMillis();//上传到ftp
InputStream inputStream=null;
byte [] io;
try {io=str.getBytes();inputStream = new ByteArrayInputStream(io);
}catch (Exception e){e.printStackTrace();
}
FtpUtil.uploadFile("ip",端口号,"账号","密码","路径",data+"a.html",inputStream);
String base64Img=outImg("https://ns.weijing.gov.cn/DownloadData/data/download?serilId=a.html&fileName="+data+"a.html&path=/Dabby_test/wiicopData");/**功能描述* @Desc* @Description 根据访问地址将HTML生成图片* @Author chenzhicai* @Date Created in 11:18 2019/2/12* @Params* @return* @Version:***/public String outImg(String path){//解析htmlImageRenderer render = new ImageRenderer();String url = path;File file;InputStream inputStream = null;byte[] data = null;try {//创建一个临时文件file = File.createTempFile("temp", ".png");//将html转为pngFileOutputStream out = new FileOutputStream(file);render.renderURL(url, out, ImageRenderer.Type.PNG);//字节流读取pnginputStream = new FileInputStream(file);data = new byte[inputStream.available()];inputStream.read(data);out.close();inputStream.close();file.deleteOnExit();} catch (Exception e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();//删除所有空格,换行,解决base解码出现中文乱码String dat1a = encoder.encode(data).replaceAll("\n", "").replaceAll("\r", "");log.info(dat1a);return  dat1a;}

Ftp工具类

依赖

<!--ftp--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.6</version></dependency><!--解析--><dependency><groupId>com.github.xuwei-k</groupId><artifactId>html2image</artifactId><version>0.1.0</version></dependency><dependency><groupId>net.sf.cssbox</groupId><artifactId>cssbox</artifactId><version>4.12</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
package cn.dabby.hotelacc.utils;import java.io.*;import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;/*** * @author **/
public class FtpUtil {/*** 下载文件* @param hostname FTP服务器地址* @param port  FTP服务器端口号* @param username  FTP登录帐号* @param password  FTP登录密码* @param pathname  FTP服务器文件目录* @param filename  weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20weixinRefund_2017-06-20* @param localpath 下载后的文件路径* @return*/public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){boolean flag = false;FTPClient ftpClient = new FTPClient();//ftp中文编码格式设置String LOCAL_CHARSET="GBK";try {try {ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时//连接FTP服务器ftpClient.connect(hostname, port);//登录FTP服务器ftpClient.login(username, password);//验证FTP服务器是否登录成功int replyCode = ftpClient.getReplyCode();if(!FTPReply.isPositiveCompletion(replyCode)){return flag;}} catch (Exception e) {throw new Exception("login ftp error!");}//设置ftp编码格式ftpClient.setControlEncoding(LOCAL_CHARSET);//切换FTP目录pathname=new String(pathname.getBytes("GBK"),"iso-8859-1");//如果目录名有中文则做编码格式转换if (!ftpClient.changeWorkingDirectory(pathname)) {// 如果不能进入dir下,说明此目录不存在!  System.out.println("创建文件目录【"+pathname+"】 失败!");  return flag;} FTPFile[] ftpFiles = ftpClient.listFiles();for(FTPFile file : ftpFiles){if(filename.equalsIgnoreCase(file.getName())){file.setName(new String(file.getName().getBytes("GBK"),"iso-8859-1"));//如果文件名名有中文则做编码格式转换File localFile = new File(localpath);OutputStream os = new FileOutputStream(localFile);ftpClient.retrieveFile(file.getName(), os);os.close();}}ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();e.getMessage();} finally{if(ftpClient.isConnected()){try {ftpClient.logout();} catch (IOException e) {}}}return flag;}/*** 上传文件(可供Action/Controller层使用)* @param hostname FTP服务器地址* @param port  FTP服务器端口号* @param username  FTP登录帐号* @param password  FTP登录密码* @param pathname  FTP服务器保存目录* @param fileName  上传到FTP服务器后的文件名称* @param inputStream 输入文件流* @return*/public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){boolean flag = false;FTPClient ftpClient = new FTPClient();ftpClient.setControlEncoding("UTF-8");try {try {ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时//连接FTP服务器ftpClient.connect(hostname, port);//登录FTP服务器ftpClient.login(username, password);//验证FTP服务器是否登录成功int replyCode = ftpClient.getReplyCode();if(!FTPReply.isPositiveCompletion(replyCode)){return flag;}} catch (Exception e) {throw new Exception("connect ftp error!");}//pathname=new String(pathname.getBytes("UTF-8"),"iso-8859-1");//如果目录名有中文则做编码格式转换ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);if (!ftpClient.changeWorkingDirectory(pathname)) {// 如果不能进入dir下,说明此目录不存在!  if (!ftpClient.makeDirectory(pathname)) {  System.out.println("创建文件目录【"+pathname+"】 失败!");  }  }ftpClient.enterLocalPassiveMode();ftpClient.storeFile(fileName, inputStream);inputStream.close();ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();} finally{if(ftpClient.isConnected()){try {ftpClient.disconnect();} catch (IOException e) {e.printStackTrace();}}}return flag;}/*** 上传文件(可对文件进行重命名)* @param hostname FTP服务器地址* @param port  FTP服务器端口号* @param username  FTP登录帐号* @param password  FTP登录密码* @param pathname  FTP服务器保存目录* @param filename  上传到FTP服务器后的文件名称* @param originfilename 待上传文件的名称(绝对地址)* @return*/public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){boolean flag = false;try {InputStream inputStream = new FileInputStream(new File(originfilename));flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);System.out.println(flag);} catch (Exception e) {e.printStackTrace();}return flag;}/*** 上传文件(不可以进行文件的重命名操作)* @param hostname FTP服务器地址* @param port  FTP服务器端口号* @param username  FTP登录帐号* @param password  FTP登录密码* @param pathname  FTP服务器保存目录* @param originfilename 待上传文件的名称(绝对地址)* @return*/public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){boolean flag = false;try {String fileName = new File(originfilename).getName();InputStream inputStream = new FileInputStream(new File(originfilename));flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);System.out.println(flag);} catch (Exception e) {e.printStackTrace();}return flag;}/*** 删除文件* @param hostname FTP服务器地址* @param port  FTP服务器端口号* @param username  FTP登录帐号* @param password  FTP登录密码* @param pathname  FTP服务器保存目录* @param filename  要删除的文件名称* @return*/public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){boolean flag = false;FTPClient ftpClient = new FTPClient();try {try {ftpClient.setConnectTimeout(1000);//连接时间超过一秒即为超时//连接FTP服务器ftpClient.connect(hostname, port);//登录FTP服务器ftpClient.login(username, password);//验证FTP服务器是否登录成功int replyCode = ftpClient.getReplyCode();if(!FTPReply.isPositiveCompletion(replyCode)){return flag;}} catch (Exception e) {throw new Exception("login ftp error!");}//切换FTP目录ftpClient.changeWorkingDirectory(pathname);ftpClient.dele(filename);ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();} finally{if(ftpClient.isConnected()){try {ftpClient.logout();} catch (IOException e) {}}}return flag;}private FTPClient newFtpClient(String host, String user, String pwd) throws Exception {FTPClient ftp = new FTPClient();//ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));int reply;ftp.connect(host);reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();throw new Exception("Exception in connecting to FTP Server");}ftp.login(user, pwd);ftp.setFileType(FTP.BINARY_FILE_TYPE);ftp.enterLocalPassiveMode();return ftp;}/*** 根据地址直接获取文件内容* @param absp* @return*/public  byte[] getFile(String absp,String Host,String Username,String Password) {byte[] ret = null;try {FTPClient ftp = newFtpClient(Host, Username, Password);InputStream is = ftp.retrieveFileStream(absp);if (is != null) {ret = IOUtils.toByteArray(is);is.close();}else{System.out.println("找不到当天对账文件");}} catch (Exception e) {ret = null;}return ret;}//可以将获取的byte[]  转换城base64字符串Base64.getEncoder().encode(ret)
}

java 后端根据传入参数生成HTML并转换成Base64图片字节码(以及FTP上传常用)相关推荐

  1. .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...

    1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...

  2. java0到9的字符怎么表示_java,_java 怎么生成一个0-9,a-z的一个44位字符串作为上传文件的名字,java - phpStudy...

    java 怎么生成一个0-9,a-z的一个44位字符串作为上传文件的名字 找到一个时间MD5加密的 package org.blog.controller; import java.io.File; ...

  3. java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...

    [填空题]一个类实现某个接口时必须实现接口中声明的所有方法,否则该类必须定义为(__); [单选题]若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( ) [填空 ...

  4. MATLAB 将 n 美分转换成 25、10、5 和 1 美分的硬币总共有多少种转换方法?编写一个函数,传入参数 n,输出转换的种类

    将 n 美分转换成 25.10.5 和 1 美分的硬币总共有多少种转换方法?编写一个函数,传入参数 n,输出转换的种类. clc clear n=input('n=');%输入n美分. num=0; ...

  5. 前后端分离学习笔记(5) ---[表单的增删改操作;以及为管理员上传头像]

    上一篇案例中也是查询到了表单的内容–>前后端分离学习笔记(4) -[路由嵌套, 查询表单显示] 文章目录 1.前端组件页面 添加管理员操作 修改管理员信息 删除管理员 为管理员上传头像 修改密码 ...

  6. Java实现文件格式转换(如amr转MP3)并上传FTP服务器实例

    1.准备JAR包 2.代码 首先确定你要转换的文件类型,如amr转成MP3格式,如果你想转换其他的格式,可以参考JAVE 视音频转码,文中详细解释了 JAVE(Java Audio Video Enc ...

  7. 【图片流转成图片】vue处理后端传来的图片流信息并转换成图片显示在前端页面上【详细解释】

    前言:今天遇到的后端传一个二维码图片给我,然后给我的是图片流的形式,看起来跟一堆乱码一样,根本用不了,必须要处理转换后才能使用,然后我看了网上帖子有的说的不是很明白,可能新人看不懂,我就也写一个详细解 ...

  8. java ftp 上传文件 进度条_java FTP上传文件(进度条显示进度)

    java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient.不知道为什么,在使用前一 ...

  9. Java框架-SpringMVC的应用(json数据交互、控制器方法返回值、文件上传)

    1. 搭建SpringMVC开发环境 1.1 创建项目,添加依赖 <?xml version="1.0" encoding="UTF-8"?> &l ...

最新文章

  1. 100万人同时抢1万张火车票,极限并发带来的思考
  2. 西南民族大学计算机基础技能应用培训基地,计科学院第九期Office应用培训开班典礼顺利举办...
  3. Kotlin binding+RecyclerView实现支付宝首页更多、应用编辑界面
  4. 全局模式下的正则表达式
  5. Eclispse 换主题、皮肤、配色,换黑色主题护眼
  6. linux mysql导出乱码问题_[MYSQL]将数据从5.0版本导入到4.1.7版本中出现乱码问题解决方案...
  7. Android - 应用程序的优先级和进程状态
  8. 软件测试第三次作业junit和Eclemma的使用
  9. 学习笔记 | 读完《公开募集证券投资基金销售机构监督管理办法》的几点感受
  10. 基于Springboot的高校二手交易网站平台设计与实现
  11. 5. JanusGraph Schema和数据类型
  12. C/C++的刷题练习之牛客网,一个友好的网站
  13. JavaWeb学习——struts1框架篇
  14. 截获HTTP/HTTPS请求实现头脑王者辅助
  15. 上月和本月对比叫什么_环比增长率怎么算月度(本周比上周是同比还是环比)...
  16. 第五章-畅销书排行榜
  17. odoo14 | 模块权限在清单加载顺序异常致group_id丢失bug解析
  18. c语言中getc函数,C语言中getc怎么用?
  19. 乐学python怎么样_铁乐学Python_day07_集合and浅谈深浅copy
  20. 搞笑新闻联播之老公岗位制度(中)铃声 搞笑新闻联播之老公岗...

热门文章

  1. psql pg_dump pg_restore等命令
  2. js三座大山之异步-Promise三种状态及变化
  3. python3.6 m venv py3_python 3.6 的 venv 模块
  4. Misdirection
  5. imessage_如何防止人们知道您已阅读他们的iMessage
  6. Qt编写串口通信程序全程图文讲解
  7. Android 截长图
  8. 《MySQL:存储过程》
  9. 7-25 输出不重复的数组元素 (10 分)
  10. c++求若干个集合的笛卡尔积