在线编辑器(WangEditor)

匿名 (未验证) 提交于 2019-12-02 23:03:14

  自己之前写了一篇关于POI 相关的博客, 想了想在公司中一般常用的不就是上传下载,poi,分页,定时等。好像还有个在线编辑器, 于是自己就花了两个多小时把编辑器相关的代码撸了遍,当然了是先百度找了找资料,看了看实现的逻辑,然后自己撸的。 编辑器自己使用的是WangEditor,网上也有很多关于Editor,kindEitor 的文章, 不过貌似好像没用。业务方面:在编辑器中编辑, 然后保存为word,或者将word中的内容加载进在线编辑器中再次编辑。效果图:

    

    

  editor.txt.html() 会将在编辑器中编辑的内容获取,然后你直接将其传入后台便可以获取到编辑器中编辑的内容。

  当你使用编辑器编辑并保存后,会在指定的保存位置生成一个word,txt文件夹和一天个htm文件。txt文件夹中是txt文件。txt文件和htm文件都是自动生成的。其中txt文件里是HTML中的标签语言,当你要将word中的内容加载进编辑器再次编辑时,获取的内容是相对应的txt文件中的内容。htm文件只有一个,是刚使用用WangEditor创建word成功后生成的,其就是个HTML文件,其中的标签,属性对应的都是编辑器中展示的模样。当你保存生成word时,是先读取htm中的内容,将${content}替换成你编辑的内容,样式什么的htm文件中模板原先就有。然后利用流将HTML中的内容写入到word中并生成word。

  

  

package com.cn.platform.utils;  import java.io.*;  import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  public class EditorUtils {      // 获取项目文件路径 public static String getUploadPath(HttpServletRequest request,String name){       StringBuilder sb = new StringBuilder();       String path = request.getContextPath();       String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;       String uploadPath = sb.append(basePath).append("/ui/CAndTFiles/").append(name).append(".doc").toString();       return uploadPath; }  //获取服务器,本地文件路径 public static String getWindowsPath(HttpServletRequest request,String name){     StringBuilder sb = new StringBuilder();     String windowPath = sb.append("I:/yishangxincheng/ysdFiles/").append(name).append(".doc").toString();     return windowPath; }  //获取服务器,本地文件路径 public static String getWindowsTxtPath(HttpServletRequest request,String name){     StringBuilder sb = new StringBuilder();     String windowPath = sb.append("I:/yishangxincheng/ysdFiles/txt/").append(name).append(".txt").toString();     return windowPath; }  /*public static void saveWord(String editTemplate,String windowPath,HttpServletRequest request,HttpServletResponse response) throws IOException{     EditorUtils.setCode(request, response);     if (editTemplate != null) {         List<String> array = new ArrayList<>();         array.add(editTemplate);         XWPFDocument doc = new XWPFDocument();           XWPFParagraph para = doc.createParagraph();           XWPFRun run = para.createRun();           OutputStream os = new FileOutputStream(windowPath);           for (String s : array) {               //把doc输出到输出流                run.setText(s);               doc.write(os);           }         os.close();         doc.close();     } }*/   //设置编码 public static void setCode(HttpServletRequest request,HttpServletResponse response) throws IOException {     request.setCharacterEncoding("utf-8");     response.setCharacterEncoding("utf-8");     response.setContentType("text/html;charset=utf-8"); }  //导出 public static void export(HttpServletRequest request,HttpServletResponse response,String url) throws IOException {     EditorUtils.setCode(request, response);     //获取文件下载路径     String filename = url.substring(url.length()-4, url.length());     if (filename.equals("docx")) {         filename = url.substring(url.length()-6, url.length());     }else{         filename = url.substring(url.length()-5, url.length());     }     File file =  new File(url);     if(file.exists()){         //设置相应类型让浏览器知道用什么打开  用application/octet-stream也可以,看是什么浏览器         response.setContentType("application/x-msdownload");         //设置头信息         StringBuilder sb = new StringBuilder();         response.setHeader("Content-Disposition", sb.append("attachment;filename=\"").append(filename).append("\"").toString());         InputStream inputStream = new FileInputStream(file);         ServletOutputStream ouputStream = response.getOutputStream();         byte b[] = new byte[1024];         int n ;         while((n = inputStream.read(b)) != -1){             ouputStream.write(b,0,n);         }         //关闭流         ouputStream.close();         inputStream.close();     } }   // 读取.mht网页中的信息 private  static String readFile(String filePath) throws Exception{     StringBuilder sb = new StringBuilder();     BufferedReader br = null;     try {         br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"utf-8"));         while (br.ready()) {             sb.append((char) br.read());         }     }catch(Exception e){         e.printStackTrace();     }finally {         if (br!=null) {             br.close();         }     }     return sb.toString(); }   //将HTML转word    private static boolean writeWordFile(String content ,String path,String fileName) throws Exception{           boolean flag = false;           FileOutputStream fos = null;           StringBuilder sb = new StringBuilder();           try {               if(!"".equals(path)){                   byte[]b = content.getBytes("utf-8");                   fos = new FileOutputStream(sb.append(path).append(fileName).append(".doc").toString());                   fos.write(b);                   fos.close();                   flag = true;               }           }catch (IOException e)           {               e.printStackTrace();           }finally {               if (fos !=null) {                   fos.close();               }           }           return flag;    }     public static void htmlToWord(String editorContent,String htmlPath,HttpServletRequest request,String wordPath,String wordName) throws Exception{        //读取网页中的内容        String htmlFile = EditorUtils.readFile(htmlPath);          // 替换后的内容        String endContent = htmlFile.replace("${content}", editorContent);         //转word        EditorUtils.writeWordFile(endContent, wordPath, wordName);     }       // 将editorContent存入txt中用于载入时直接使用    public static void saveEditorContent(String editorContent,String targetPath,String fileName) throws IOException{        FileOutputStream fos = null;        StringBuilder sb = new StringBuilder();        try {            if(!"".equals(targetPath)){                byte[]b = editorContent.getBytes("utf-8");                fos = new FileOutputStream(targetPath);                fos.write(b);                fos.close();            }        }catch (IOException e)        {            e.printStackTrace();        }finally {            if (fos !=null) {                fos.close();            }        }            }      //载入    public static String load(String name,HttpServletRequest request,HttpServletResponse response) throws IOException{        EditorUtils.setCode(request, response);        String path = EditorUtils.getWindowsTxtPath(request, name);        StringBuilder sb= new StringBuilder();        BufferedReader br = null;        try {            br = new BufferedReader(new InputStreamReader(new FileInputStream(path),"utf-8"));            while (br.ready()) {                sb.append((char) br.read());            }        }catch(Exception e){            e.printStackTrace();        }finally {            if (br!=null) {                br.close();            }        }                return sb.toString();    }      }

  其中主要的代码就是工具类,代码都是能直接使用的。当然了,代码我还有10%没弄上来,不过我相信有了这些代码,看到此篇博客的人应该没问题。

   在此,希望此篇博客能帮助到一些人。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!