好用的编辑工具打造总结

 

        最近20来天都在搞一个编辑助手终于完工,踩坑无数所以特意记录一下,慢慢跳完。起因做内容采集要对图片处理网上找了一圈都没功能满足的,就花时间搞了个simpleImageTool小的图片处理库。看到编辑网站发布文章效率很低,长的一篇word文章图片很多每张图另存然后缩放后再传后台花一二十分钟都不为过,现在分分钟以内搞定一切,效率是提高大大。想给编辑顺手做个程序提高效率,开始以为几天搞定就可以搞定。网上查资料看到有部分在服务器进行word转换,然后发布,想法是好的但是有时word文档很大上传很久,还可能转换失败(如html,图片格式不能处理),编辑可控制的很少,最终在本地用swing做client端来处理,好处是不用传word文档,转换失败可以及时干预,用另外的方式处理,比如word有特殊字符,特殊的图片格式什么的。。。处理好后通过post方式上传权限验证后台,这样传的文件就小很多保证传的是有用的,效率搞很多这样,可以不动后台任何代码。网上查了一下没看到有人这样做,我来吃一回螃蟹。以前没用swing做过东西,感觉很难,熟练了也还像样。看似简单,做到好用,稳定,容错强,需要下很多功夫,作为一个常驻工具,放托盘里,需要就点出来,就要保证抛异常不死掉,运行异常文件不能卡死。主要的坑就是容错,word转换异常,网页下载异常,编码异常。。。做到有错必处理,严重错误要弹框,才能引起用户注意,使用这个可控。

 

    1、word转换html目前研究了个遍目前比较靠谱的是jacob和poi方式,两种方式都实现了一把,各有优势。jacob处理比较慢,能力强,处理好了基本上是万能的。poi方式处理速度快,有的图片会解析不出来给你省掉出现html少部分图片,有时还会根据图片原始的内容会形成emf,wmf格式的图片,emf格式转换成jpg这类常用格式一般没问题,有少量的会转换失败。wmf只有走先转svg再转通用格式模式,存在尺寸不好控的问题。jacob 我用wps来做的,wps对各种图片处理比较好,比word要好很多,wps版本很多特征值不一样导致处理看起很low。wps对应好几个,严重错误要弹出框用户才知道怎样做,日志很少给看。

      初始化wps控件片段:

ActiveXComponent app=null;
        try {
            app = new ActiveXComponent("KWPS.Application");  //对应新版本wps
        }catch (UnsatisfiedLinkError unsatisfiedLinkError){
            log.error("请检查jacob库的安装!");
            log.error(ExceptionUtil.getExceptionDetail(unsatisfiedLinkError));
            JOptionPane.showConfirmDialog(null, "请安装acob库!!","提示:jacob加载失败", JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE);
            return null;
        }catch (ComFailException cf){
            log.error("请检查wps版本");
            log.error(ExceptionUtil.getExceptionDetail(cf));
            try {
                app = new ActiveXComponent("wps.Application");  //对应比较新版本wps
            }catch (ComFailException cf2){
                log.error("请检查wps版本");
                log.error(ExceptionUtil.getExceptionDetail(cf2));
                try{
                    app = new ActiveXComponent("Word.Application");
                }catch (ComFailException cf3){
                    log.error("没有发现wps控件,请重新安装wps!");
                    log.error(ExceptionUtil.getExceptionDetail(cf2));
                    JOptionPane.showConfirmDialog(null, "没有发现wps控件,请重新安装wps!!","提示:wps加载失败", JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE);
                    return null;
                }
            }
        }

     emf转换出错需要捕获异常,否则就挂了,根据它源码才知道,网上找了多久没找到,网上的代码就一个版本没做处理,遇到奇葩的emf程序挂掉。

 

      emf转换异常捕获片段

 

EMFRenderer emfRenderer;
            try {
                 emfRenderer = new EMFRenderer(inputStream);
            } catch(NullPointerException e){                //捕获NullPointerException相当重要
                log.error(ExceptionUtil.getExceptionDetail(e));
                return null;
            }

 

   2、html清洗

       word转换的html或者网上拉下来的网页都必须经过去杂清洗。做到随时可以添加正则进去清除,常见的清洗一次性处理,特殊再添加规则进去。网上找了一下都不容易添加规则处理最好自己又搞了个链式处理。

    片段:

 

public HTMLCleaner cleanWithRegexs(List<String> cleanRegexList) {
        if (!cleanRegexList.isEmpty()) {
            for (String regexStr : cleanRegexList) {
                Pattern regex = Pattern.compile(regexStr, Pattern.CASE_INSENSITIVE);
                Matcher match = regex.matcher(html);
                html = match.replaceAll("");
            }
        }
        return this;
    }

    这样太有用了添加规则很容,编辑随时填规则来处理成为可能。

 

 

outHtml = HTMLCleaner.in(outHtml)
                                       .standClean()      //常见的集中处理      
                                       .repleaceWithRegex("charset=(\\s)*[\\w-]+(\\s)*","charset=utf-8 ")
                                       .repleaceWithRegex("<!--\\[if !supportLists\\]-->l(\\s)*\n","*")
                                       .repleaceWithRegex("<!--\\[if !supportLists\\]-->","")
                                       .finish();

          3、编码探测很重要,通过程序猜测编码,然后转换成统一的编码,不然乱码时常发生,很是头痛。jacob转换的html根据word文档的编码不同会不同。poi转换docx的html没有charset标识,会导致编辑用浏览器打开可能不能自动识别编码显示乱码,我是在头部强行加charsett=utf-8,得到很好的解决。网上拉取的网页会遇到标识的是charset=gb2312实际是utf的编码这类特别注意,不然必须是乱码。

 

 

.repleaceWithRegex("<head>"," <meta charset=\"utf-8\"/>")

 

 

         4.在实施这个程序时发现simleImageTool有的地方不完善,进行了改进,可以很轻松的做到可以通过参数来定制缩放、文字水印、图片水印、裁切等单张处理、文件夹遍历批量处理。simpleImageTool不过本身使用很简单,看参数就是知道怎样使用,假如能帮到您最好。我认为编辑需要的图片处理功能都已经有,功能算网上能找到的最齐全的最方便使用的,不过好像没什么人用这个库,也没必要写文档,。

      最近做这个编辑工具基本上把simpleImageTool所有的功能使用上了,比如只设宽或者高就是表示定宽或者定高,宽高都设置就是按指定的来处理,不够边进行补白还是拉伸等都可以通过参数来控制,参数进行保存应用于所有的图片。

        可有的参数:

     图片工具:

        文章处理:

转载于:https://my.oschina.net/u/157306/blog/1519626

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值