Java操作Jxl实现数据交互。三部曲——《第三篇》

Java操作Jxl实现上传文本文件实现转PDF格式在线预览。

本文实现背景Web项目:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js、Css文件页面:Jsp、拦截请求:Servlet、逻辑处理:ClassBean、数据库:SQLserver

注意:Bean中操作SQL语句进行处理是公司内部方法,可替换为其它方法自行扩展!主要看代码逻辑业务处理!

首先我们看见的是Easyui中的datagrid中的数网格。

接下来进行创建一个xsl文本格式数据文件

我们任意点击条数据,点击附件这是弹出一个窗口让我们进行附件上传,只能上传文本数据格式!

 点击保存附件上传成功!该附件信息文件名称及文件路径以保存在数据库中,查询该人员的相关信息及附件信息,此时此刻可查看附件信息

 点击查看及可把xls数据格式在线转码为PDF格式数据进行展示!(注:在线转码与预览需要一些本地配置,请关注我下一篇博客!)

jsp代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pantech.base.common.tools.MyTools"%>
<%@ page import="com.pantech.base.common.tools.PublicTools"%>
<%@ page import="com.pantech.src.develop.Logs.*"%>
<%@ page import="com.pantech.base.common.tools.*"%>
<%@ page import="com.pantech.src.develop.store.user.*"%>
<%@ page import="com.pantech.src.develop.manage.workremind.WorkRemind"%>
<%@ page import="java.util.Vector"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="com.pantech.base.common.db.DBSource"%>

<html>
<head>


    
    <title>导入文件转为FDF格式在线预览</title>
    <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/themes/default/easyui.css">
    <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/bootstrap.css"/>
    <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/naber.css"/>
    <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/font-awesome/css/font-awesome.css">
    <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/SMS-index.css"/>
    <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/listPage.css"/>
    <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/jquery.min.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/locale/easyui-lang-zh_CN.js"></script>
    <script charset="utf-8" src="<%=request.getContextPath()%>/script/bootstrap.min.js"></script>
    <script charset="utf-8" src="<%=request.getContextPath()%>/script/layer/layer.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/clientScript.js"></script> 
    <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/publicScript.js"></script>
        <script type="text/javascript" src="<%=request.getContextPath()%>/script/ajaxfileupload.js"></script>
        <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/publicScript.js"></script>
        <script type="text/javascript" src="<%=request.getContextPath()%>/script/FlexPaper/flexpaper_handlers.js"></script>
          <script type="text/javascript" src="<%=request.getContextPath()%>/script/FlexPaper/flexpaper.js"></script>
        <style type="text/css">
            #divPageMask2{background-color:#D2E0F2; filter:alpha(opacity=90);left:0px;top:0px;z-index:100;}
            #divPageMask3{background-color:#D2E0F2; filter:alpha(opacity=90);left:0px;top:0px;z-index:100;}
            #win td{height:30px;}
        </style>
    </head>
<body class="easyui-layout" >
    <!-- 页面学生列表区 -->
    <div id="tableDIV" class="list-table table-responsive" style="height:600px;width: 900px">
        <table id="list" width="100%"></table>
    </div>

    <!-- 上传附件弹窗 -->
    <div id=jxdialog style="overflow: hidden;">
        <div id="north" region="north" title="教学管理">
            <table id="tb">
                <tr>
                    <td><a href="#" id="newfjsc" class="easyui-linkbutton"plain="true" iconcls="icon-new" onClick="doToolbar(this.id);"title="">上传附件</a></td>
                    <td><a href="#" id="delfjxx" class="easyui-linkbutton"plain="true" iconcls="icon-cancel" onClick="doToolbar(this.id);"title="">删除</a></td>
                </tr>
            </table>
        </div>
        <div region="center">
            <table id="jxbzList"></table>
        </div>
    </div>


    <!-- 附件上传 -->
    <div id="jxbzInfo" style="overflow:hidden;">
        <form id="form1" method='post'>
            <table style="width:100%;" class="tablestyle">
                <tr>
                    <td class="titlestyle">附件上传</td>
                    <td>
                        <input type="file" name="file1" id="icJXBZ_UPLOAD" style="width:280px;" />
                    </td>
                </tr>
            </table>
            <div style="display: none;">
                <input type="hidden" id="active" name="active"/>
            </div> 
        </form>
    </div>


    <!-- 遮罩层 -->
    <div id="ic_flexPaperZhezhao" style="position:absolute; z-index:99999; width:100%; height:100%; background-image:url('<%=request.getContextPath()%>/images/course/pic5.png'); display:none;  text-align:center;" onclick="$('#ic_flexPaperDiv').hide();">
            <font color="white" style="position:relative; top:45%; left:0;">文件预览加载中<br/><img src="<%=request.getContextPath()%>/images/course/loading.gif" /></font>
    </div>
            
    <!-- 文件预览 flexpaper -->
    <div id="ic_flexPaperDiv" style="position:absolute; z-index:99999; width:100%; height:100%; background-image:url('<%=request.getContextPath()%>/images/course/pic5.png'); display:none;" onclick="$('#ic_flexPaperDiv').hide();">
        <div id="documentViewer" class="flexpaper_viewer" style="width:90%;height:90%; position:relative; top:5%; left:5%;">
        </div>
    </div>        
        
</body>
<script type="text/javascript">
    var XSBH='';
    var uploadPath='<%=MyTools.getProp(request, "Base.JYWDStandardUpLoadPath")%>';//上传路径
    var filePreview='<%=MyTools.getProp(request, "Base.JYWDStandardFilePreview")%>';//预览路径
    var iUSERCODE="<%=MyTools.getSessionUserCode(request)%>";   //获得用户登录code    

    $(document).ready(function(){
        loadGrid();
        loadDialog();
    });
    
    
    //dialog窗口
    function loadDialog() {
        //上传附件弹窗
        $('#jxbzInfo').dialog({   
            width: 480,//宽度设置   
            height: 120,//高度设置 
            modal:true,
            closed: true,   
            cache: false, 
            draggable:false,//是否可移动dialog框设置
            toolbar:[{
                //保存编辑
                text:'保存',
                iconCls:'icon-save',
                handler:function(){
                    //传入save值进入doToolbar方法,用于保存
                    doToolbar('savefjxx');
                }
            }],
            //打开事件
            onOpen:function(data){},
            //读取事件
            onLoad:function(data){},
            //关闭事件
            onClose:function(data){
                //上传附件表单元素数据
                var file = $('#icJXBZ_UPLOAD');
                file.after(file.clone().val(""));
                file.remove(); 
                jxloadGrid(Maindata[0].学生编号);  //调用读取附件页面信息
                
            }
        });
        
        //上传教学附件
        $('#jxdialog').dialog({   
            width: 800,//宽度设置   
            title:'教学管理计划',
            height: 480,//高度设置 
            modal:true,
            closed: true,  
            cache: false, 
            draggable:false,//是否可移动dialog框设置
            //打开事件
            onOpen:function(data){},
            //读取事件
            onLoad:function(data){},
            //关闭事件
            onClose:function(data){
                iKeyCode=XSBH;                
            }
        });
        
    }


    //上传附件信息    
    function jxloadGrid(zy) {
        XSBH=zy;
        loadGridfjsc(zy);
        $('#jxdialog').dialog('open');
    }



    //工具按钮
    function doToolbar(iToolbar){
        //判断获取参数为new,执行新建附件操作
        if(iToolbar == 'newfjsc'){
            $('#jxbzInfo').dialog('setTitle', '新建教学附件信息');
            $('#jxbzInfo').dialog('open');        //打开dialog
        }
    
        //执行保存附件信息操作
        if(iToolbar == 'savefjxx'){ 
            if($('#icJXBZ_UPLOAD').val()==''){
                alertMsg("请选择上传文件");
                return;
            }
        
            var fileTypePhoto='<%=MyTools.getProp(request, "[FileTypePhoto]")%>';  //图片
            var fileTypeTxt='<%=MyTools.getProp(request, "[FileTypeTxt]")%>';    //文本
            var fileSuffix=$("#icJXBZ_UPLOAD").val().split('.')[$("#icJXBZ_UPLOAD").val().split('.').length-1]; //获取文件后缀名
        
             if (fileTypeTxt.indexOf(fileSuffix)!=-1) {
                checkFile();//新建
            }else {
                alertMsg("只能上传文本格式的文件");
                return;
            }
            
        }

        //删除附件信息操作
        if(iToolbar=="delfjxx"){
            if(iKeyCode==""){
                alertMsg("请先选择一行数据");
                return;
             }
             ConfirmMsg("删除后,将无法恢复,是否继续?","delRec();","");
        }
        
        
    }

    
    //删除附件信息方法
    function delRec(){
        $.ajax({
        type:'post',
        url:"<%=request.getContextPath()%>/ImportTextBean_Servlet",
        data:"active=deleteRow&FJXXBH=" + iKeyCode,
        dataType:'json',
            success:function(datas){
                if(datas[0].msg=="删除成功"){
                    showMsg(datas[0].msg);
                     jxloadGrid(XSBH);  //调用读取附件页面信息
                }
                
            }
        });   
    }



//加载datagrid主页面信息
function loadGrid(){
    $('#list').datagrid({
        url: '<%=request.getContextPath()%>/ImportTextBean_Servlet',
        queryParams: {"active":"loadElective"},
        loadMsg : "信息加载中请稍后!",//载入时信息
        nowrap: false,//当数据长度超出列宽时将会自动截取
        showFooter:true,
        rownumbers: true,
        animate:true,
        striped : true,//隔行变色
        pageSize : 10,//每页记录数
        singleSelect : true,//单选模式
        pageNumber : 20,//当前页码
        pagination:true,
        fit:true,
        fitColumns: true,//设置边距
        columns:[[
            {field:'姓名',title:'姓名',width:fillsize(0.2)},
            {field:'所在区域',title:'所在区域',width:fillsize(0.2)},
            {field:'col3',title:'附件',width:fillsize(0.1),
                formatter:function(value,rec,index){
                    return "<input type='button' style='cursor:pointer;' value='[附件]' onclick='jxloadGrid(\""+rec.编号+"\");'>&nbsp;"; 
            }}
        ]],
        onClickRow:function(rowIndex, rowData){
            row=rowData;
        },
        onLoadSuccess: function(data){
            iKeyCode='';
        },
        onLoadError:function(none){
            
        }
    });
    

}





/* 学生个人附件信息列表数据 */
function loadGridfjsc(zy){
    $('#jxbzList').datagrid({
        url:'<%=request.getContextPath()%>/ImportTextBean_Servlet',
        queryParams:{"active":"queryList","XSBH" : zy}, 
        loadMsg : "信息加载中请稍侯!", //载入时信息
        title:'教学计划信息列表',
        width : '785px', //宽度       
        height : '500px',
        nowrap : false, //截取当数据长度超出列宽时会自动截取
        fitColumns : true, //自适应列宽防止出现水平滚动
        striped : true, //隔行变色
        pagination : true, //分页
        showFooter:true, //显示页脚信息
        pageSize : 10, //每页记录数
        singleSelect : true, //单选模式 这里是指只能选一行不能多选
        pageNumber :1, //当前页码
        rownumbers:true,
        columns:[[
            //field为读取数据的数据名,title为显示的数据名,width宽度设置,align数字在表格中显示的位置
            {field:'编号',title:'教学计划编号',hidden:true},
            {field:'文件名',title:'文件名称',width:fillsize(0.12),align:'center'},
            {field:'创建人',title:'上传人',width:fillsize(0.15),align:'center'},
            {field:'创建时间',title:'上传时间',width:fillsize(0.15),align:'center'},
            {field:'col3',title:'附件',width:fillsize(0.15),align:'center',
                formatter:function(value,rec,index){
                    return "<input type='button' style='cursor:pointer;' value='[查看]' onclick='decideFile(\""+rec.文件路径+"\",\""+rec.预览路径+"\",\""+index+"\");'>" 
            }}
        ]],
        //单击某行时触发
        onClickRow:function(rowIndex,rowData){
            //主键赋值
            iKeyCode = rowData.编号;
            curRowData = rowData;
        },
        //加载成功后触发
        onLoadSuccess: function(data){
            iKeyCode = '';
            curRowData = '';
            Maindata=data;
        }
        
    });
};

    
    
    /**检查上传文件*/
    function checkFile(){
        var filePath = $("#icJXBZ_UPLOAD").val();
       
        var pattern = /^[^\s]*$/;
        var fname = filePath.substring(filePath.lastIndexOf("\\")+1, filePath.length);
        if(!pattern.test(fname)){//匹配文件名
            alertMsg('文件名中不能有空格!',0);
            return;
        }
        
        var arr = filePath.split('\\');
        var fileName = arr[arr.length-1];
        if(filePath!=""){
            uploadFile('icJXBZ_UPLOAD');
        } 
    }
        
    
    //上传附件请求方法
    function uploadFile(fileId){
            $.ajaxFileUpload({
                url:'<%=request.getContextPath()%>/ImportTextBean_Servlet?active=uploadify&XSBH='+XSBH, //服务器地址
                secureuri:false,
                /*type:"post", */
                fileElementId:fileId,//文件选择框的id属性
                dataType: 'text',//服务器返回的格式,可以是json
                success: function (data){//相当于java中try语句块的用法
                    if(data == '上传文件成功'){
                        //提示信息
                        showMsg('上传文件成功');
                        loadGridfjsc(XSBH);
                        $('#jxbzInfo').dialog('close');
                    }else{
                        $('#jxbzInfo').dialog('close'); 
                        loadGridfjsc(JXSKJHMX_BH);
                        alertMsg(data);
                    }
                    
                }
           }); 
       }
                
        
        

    //预览的是图片还是文本进行处理
    function decideFile(path, previewpath,index){
        curRowData=Maindata.rows[index];
        preview(path, previewpath);//文本
    }
         

    //显示文本文件预览
    function preview(path, previewpath){
        $('#ic_flexPaperZhezhao').show();
        var swfPath =filePreview+previewpath;
        $.ajax({
           type: 'POST',
           url: '<%=request.getContextPath()%>/ImportTextBean_Servlet',   
           data: 'active=fileToSwf&filePath='+path, 
           //dataType: 'json',    
           success: function(datas){
                if(datas != '') {
                       var json = eval("("+datas+")");
                       //判断文件是否转换成功
                       if(json[0].MSG == '转换成功'){ 
                           $('#documentViewer').FlexPaperViewer({
                               config : {
                                   //需要使用FlexPaper打开的文档
                                SWFFile : escape(swfPath), 
                                //初始化缩放比例
                                Scale : 1.0,    
                                //缩放样式,其他可选值包括:easenone,easeout,linear,easeoutquad
                                ZoomTransition : 'easeout',  
                                //从一个缩放比例变为另外一个缩放比例需要花费的时间,该参数值应该为0或更大
                                ZoomTime : 0.5,  
                                //缩放比例之间间隔
                                ZoomInterval : 0.2, 
                                //初始化时自适应页面
                                FitPageOnLoad : false,
                                 //初始化时自适应页面宽度  
                                FitWidthOnLoad : false, 
                                 //当设置为true时,单击全屏按钮会打开一个FlexPaper最大化的新窗口而不是全屏,当由于flash播放器因为安全而禁止全屏,而使用flexpaper作为独立的flash播放器的时候设置为true是个优先选择
                                FullScreenAsMaxWindow : false,
                                //当设置为true时,展示文档时不会加载完整个文档,而是逐步加载,但是需要将文档中转化为9以上的版本(使用pdf2swf的时候使用-T 9标签)
                                ProgressiveLoading : false, 
                                //设置最小的缩放比例
                                MinZoomSize : 0.5,  
                                //设置最大的缩放比例        
                                MaxZoomSize : 3,            
                                //设置为true时,单击搜索所有符合条件的地方高亮显示
                                SearchMatchAll : false,    
                                //设置启动模式如“Portrait”或“TowPage” 
                                InitViewMode : 'Portrait',  
                                RenderingOrder : 'flash',
                                StartAtPage : '',
                                //工具栏上是否显示样式选择框
                                ViewModeToolsVisible : true, 
                                //工具栏上时候显示缩放工具
                                ZoomToolsVisible : true,  
                                //工具栏上是否显示导航工具   
                                NavToolsVisible : true,  
                                //工具栏上是否显示光标工具    
                                CursorToolsVisible : true,   
                                //工具栏上是否显示搜索工具
                                SearchToolsVisible : false,  
                                WMode : 'window',
                                //设置地区(语言)
                                localeChain: 'zh_CN'  
                            }
                           });
                           
                        $('#ic_flexPaperZhezhao').hide();
                        $('#ic_flexPaperDiv').show();
                       }else if(json[0].MSG == '转换失败'){
                           //判断serverMsg值
                           if(json[0].serverMsg == 'openoffice服务未启动'){
                               alertMsg('openoffice服务已重新启动,点击确定后可重新预览!');
                           }else if(json[0].serverMsg == 'openofficeBat文件不存在'){
                               alertMsg('openoffice服务启动文件不存在,如有疑问请联系管理员!');
                           }else{
                               alertMsg('文件暂时无法预览,如有疑问请联系管理员!');
                           }
                           $('#ic_flexPaperZhezhao').hide();
                       }
                   }
            }
        });            
    }

</script>
</html>

Servlet代码:

package or.og.jxldemo;

import java.io.IOException;
import java.net.URLDecoder;
import java.sql.SQLException;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.pantech.base.common.exception.WrongSQLException;
import com.pantech.base.common.tools.JsonUtil;
import com.pantech.base.common.tools.MyTools;
import com.pantech.base.common.tools.TraceLog;

import net.sf.json.JSONArray;

/**
 * Servlet implementation class ImportTextBean_Servlet
 */
public class ImportTextBean_Servlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置字符编码为UTF-8
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        
        String active = MyTools.StrFiltr(request.getParameter("active"));// 拿取前台的active值
        int pageNum = MyTools.parseInt(request.getParameter("page"));    //获得页面page参数 分页
        int pageSize = MyTools.parseInt(request.getParameter("rows"));    //获得页面rows参数 分页
        
        Vector jsonV = null;//返回结果集
        JSONArray jal = null;//返回json对象
        ImportTextBean bean = new ImportTextBean(request);
        this.getFormData(request, bean); //获取SUBMIT提交时的参数(AJAX适用)
        System.out.println("active:--"+active);

        
        
        //读取学生信息
        if("loadElective".equalsIgnoreCase(active)){  
            try {
                jsonV = bean.loadElective(pageNum, pageSize);
                
                jal = (JSONArray)jsonV.get(2);
                response.getWriter().write("{\"total\":" + MyTools.StrFiltr(jsonV.get(0)) + ",\"rows\":" + jal.toString() + "}");//返回前台datagrid需要的数据格式
                TraceLog.Trace("{\"total\":" + MyTools.StrFiltr(jsonV.get(0)) + ",\"rows\":" + jal.toString() + "}");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        
        //查询附件信息表
        if("queryList".equalsIgnoreCase(active)) {
            String XSBH =MyTools.StrFiltr(request.getParameter("XSBH")); //学生编号
            try {
                jsonV = bean.queryList(XSBH);
                jal = (JSONArray)jsonV.get(2);//转化为JSON数据格式
                response.getWriter().write(jal.toString());//返回数据到前台
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        
        
        
        //上传附件请求方法
        if("uploadify".equalsIgnoreCase(active)){
            String XSBH =MyTools.StrFiltr(request.getParameter("XSBH")); //学生编号
            String savePath = "";
            savePath=MyTools.getProp(request, "Base.JYWDStandardUpLoadPath");
            String savetestPath = MyTools.getProp(request, "Base.testPathFile");
    
            System.out.println("--上传路径:"+savePath+"--文档类型:");
            DiskFileItemFactory fac = new DiskFileItemFactory();  
            ServletFileUpload upload = new ServletFileUpload(fac);  
            upload.setHeaderEncoding("utf-8");  
               
            bean.uploadifyFile(savePath, request, response); //调用创建文件方法
            if (bean.getMSG().equals("保存成功")) {
                try {
                    bean.UploadToDB(request,XSBH);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (WrongSQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }    //调用插入数据方法
                response.getWriter().write(bean.getMSG());
            }else {
                response.getWriter().write(bean.getMSG());
            }
        }
        
        
        
        
        //将word等文件转换成swf格式
        if("fileToSwf".equalsIgnoreCase(active)){ 
            String path = MyTools.StrFiltr(request.getParameter("filePath"));  //文件路径
            String filePath =path;
            Office2SWF o2s = new Office2SWF(request, filePath);
            boolean flag = o2s.conver();
            
            if(flag){
                jal = JsonUtil.addJsonParams(jal,"MSG", "转换成功");
            }else{
                jal = JsonUtil.addJsonParams(jal,"MSG", "转换失败");
                if("openoffice服务未启动".equalsIgnoreCase(o2s.getMSG()) || "openofficeBat文件不存在".equalsIgnoreCase(o2s.getMSG())){
                    jal = JsonUtil.addJsonParams(jal, "serverMsg", o2s.getMSG());
                }
            }
            response.getWriter().write(jal.toString());
        }
        
        
        
        //删除附件信息表
        if("deleteRow".equalsIgnoreCase(active)) {
            String FJXXBH = MyTools.StrFiltr(request.getParameter("FJXXBH"));  //附件信息编号
            
            try {
                //调用删除操作
                bean.deleteRow(FJXXBH);
                //返回操作信息
                jal=JsonUtil.addJsonParams(jal, "msg", bean.getMSG());
                response.getWriter().write(jal.toString());
            } catch (SQLException e) {
                e.printStackTrace();
                jal = JsonUtil.addJsonParams(jal, "msg", "无法获取数据<br>"+bean.getMSG());
                response.getWriter().write(jal.toString());
            } catch (WrongSQLException e) {
                e.printStackTrace();
            }         
        }
        
        
        
    }
    
    
    
    /**
    * 从界面没获取参数
    * @date 
    * @author:yeq
    * @param request
    * @param MajorSetBean
    */
    private void getFormData(HttpServletRequest request, ImportTextBean bean){
        bean.setUSERCODE(MyTools.getSessionUserCode(request));   //USERCODE
    }
    

}

Bean代码:

package or.og.jxldemo;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.pantech.base.common.db.DBSource;
import com.pantech.base.common.exception.WrongSQLException;
import com.pantech.base.common.tools.MyTools;

public class ImportTextBean {
    

    private HttpServletRequest request;
    private String USERCODE;//用户编号
    private DBSource db;
    
    
    private String    GX_FJXXBH;//附件信息编号
    private String    GX_FJXXWJM;//附件信息文件名
    private String    GX_FJXXTYPT;//附件信息文件类型
    private String    GX_FJXXWJLJ;//附件信息文件路径
    private String    GX_FJXXYLLJ;//附件信息预览路径
    private String MSG;  //提示信息
    /**
     * 构造函数
     * @param request
     */
    public ImportTextBean(HttpServletRequest request) {
        this.request = request;
        this.db = new DBSource(request);
    }
    
    
    
    //读取学生信息
    public Vector loadElective(int pageNum,int pageSize) throws SQLException {
        DBSource dbSource = new DBSource(request);
        Vector vector = null;
        String sql = "";
        
        sql="SELECT * FROM [student].[dbo].[V_基础信息_学生信息表] ";
        vector = dbSource.getConttexJONSArr(sql, pageNum, pageSize);
        return vector;
    }
    
    
    
    //查询附件信息表
    public Vector queryList(String XSBH) throws SQLException {
        String sql="";
        Vector vec = null; // 结果集
        sql="SELECT [编号],[学生编号],[文件名],[文件类型],[文件路径],[预览路径],[创建人],convert(nvarchar(19),创建时间,21) as 创建时间,[状态]   " + 
            "FROM [V_学生管理_附件信息表]  where 学生编号 ='" + MyTools.fixSql(XSBH)+"'";
        vec = db.getConttexJONSArr(sql, 0, 0);
        return vec;
    }
    
    
    
    
    
    
    
    //Uploadify上传文件
    public void uploadifyFile(String savePath, HttpServletRequest request, HttpServletResponse response){
        File f1 = new File(savePath);  
        //当文件夹不存在时创建
        if (!f1.exists()) {  
            f1.mkdirs();  
        }  
        DiskFileItemFactory fac = new DiskFileItemFactory();  
        ServletFileUpload upload = new ServletFileUpload(fac);  
        upload.setHeaderEncoding("utf-8");  
        List fileList = null;  
        try {  
            fileList = upload.parseRequest(request);  
            Iterator<FileItem> it = fileList.iterator();  
         
            String name = "";   //文件名
            String extName = "";  //文件后缀名
            int dian=0;//点所在的位置
            
            while (it.hasNext()) {  
                FileItem item = it.next();  
                if (!item.isFormField()) {  
                    name = item.getName();
                    String fileName = name;
                    long size = item.getSize();  
                    String type = item.getContentType();  
                    System.out.println(size + " " + type);  
                    if (name == null || name.trim().equals("")) {  
                        continue;  
                    }  
                    //扩展名格式    
                    if (name.lastIndexOf(".") >= 0) {  
                        extName = name.substring(name.lastIndexOf("."));  //获取文件格式
                    }  
                    File file = null;
                    String filePath = "";  //文件路径
                    String tempFilePath = ""; //文件临时路径
                    //SimpleDateFormat form = new SimpleDateFormat("HH-mm-ss-SS");
                    long ct =System.currentTimeMillis(); //获得当前系统时间毫秒,毫秒数其实就是自1970年1月1日0时起的毫秒数
                    Date newdate=new Date();//给图片加时间为防止页面图片不刷新
                    //String temp1=form.format(newdate);
                    do {  
                        //生成文件名  
                        //name = temp1.replaceAll("-", "").toUpperCase();
                        name=String.valueOf(ct)+"-"+this.getUSERCODE();  //获得毫秒数生成文件名加上当前登入人
                        filePath = savePath +""+ name+extName ;
                        tempFilePath =  name+""+extName;
                        dian=tempFilePath.indexOf(".");
                        file = new File(filePath);  
                    } while (file.exists());
                    File saveFile = new File(filePath);  
                    item.write(saveFile);
                    
                  //判断如果文件是txt文件的话,根据不同编码修改编码为UTF-8,以免预览出现乱码
                    if(".txt".equalsIgnoreCase(extName)){
                        String code = judgeCharset(new File(filePath));//判断文件编码
                        //System.out.println("++++++++++++++++++++++++++++++上传文件字符集为:"+code);
                        if(!"UTF-8".equalsIgnoreCase(code)){
                            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)),"UTF-8")); 
                            bw.write(new String(item.getString(code).getBytes("UTF8"),"UTF-8"));
                            bw.flush();
                            bw.close();
                        }
                    }
                    this.setGX_FJXXTYPT(extName);  //附件信息文件类型,执行获得附件类型字段方法
                    this.setGX_FJXXWJM(fileName);  //文件名
                    this.setGX_FJXXWJLJ(filePath);  //文件完整路径
                    this.setGX_FJXXYLLJ(tempFilePath.substring(0, dian)+".swf"); //文件临时路径
                    System.out.println(extName+":"+fileName+"&&"+filePath);
                }
                this.setMSG("保存成功");
            }  
            
        } catch(Exception e){
                this.setMSG("保存失败");
            e.printStackTrace();
        }
    }
    
    

    //往数据库插入
    public void UploadToDB(HttpServletRequest req, String XSBH) throws SQLException, WrongSQLException{
        DBSource db = new DBSource(req);  //声明数据库连接对象
        SimpleDateFormat form = new SimpleDateFormat("HH-mm-ss-SS");
        Date newdate=new Date();//给图片加时间为防止页面图片不刷新
        String sql="";
            String temp1=form.format(newdate);
            System.err.println("SQL:"+temp1);
                   
                sql = "insert into [V_学生管理_附件信息表] ([编号],[学生编号],[文件名],[文件类型],[文件路径],[预览路径],[创建人],[创建时间],[状态]) values ("+
                        "newid(),"+    //编号    
                        "'"+MyTools.fixSql(XSBH)+"',"+ //学生编号    
                        "'"+MyTools.fixSql(this.getGX_FJXXWJM())+"',"+    //文件名    
                        "'"+MyTools.fixSql(this.getGX_FJXXTYPT())+"',"+    //文件类型
                        "'"+MyTools.fixSql(this.getGX_FJXXWJLJ())+"',"+        //文件路径
                        "'"+MyTools.fixSql(this.getGX_FJXXYLLJ())+"',"+        //预览路径
                        "'post',"+                                            //USERCODE
                        "getDate(),'1'"+                                    //创建时间
                        ")";    
                if(db.executeInsertOrUpdate(sql)){
                    this.setMSG("上传文件成功");
                }else{
                    this.setMSG("上传文件失败");
                }    
        
    }
    
    
    

    //判断文件编码
    public String judgeCharset(File file) {
        String charset = "GBK";
        byte [] first3Bytes = new byte[3];
        try {
            boolean checked = false;
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            bis.mark(0);
            int read = bis.read(first3Bytes, 0, 3);
            if (read == -1) return charset;
            if (first3Bytes[0] == (byte)0xFF && first3Bytes[1] == (byte)0xFE) {
                charset = "UTF-16LE";
                checked = true;
            }else if(first3Bytes[0] == (byte)0xFE && first3Bytes[1] == (byte)0xFF) {
                charset = "UTF-16BE";
                checked = true;
            }else if(first3Bytes[0] == (byte)0xEF && first3Bytes[1] == (byte)0xBB && first3Bytes[2] == (byte)0xBF) {
                charset = "UTF-8";
                checked = true;
            }
            bis.reset();
            
            if (!checked) {
                while ((read = bis.read()) != -1) {
                    if (read >= 0xF0)
                        break;
                    if (0x80<=read && read <= 0xBF) //单独出现BF以下的,也算是GBK
                        break;
                    if (0xC0<=read && read <= 0xDF) {
                        read = bis.read();
                        if (0x80<= read && read <= 0xBF)//双字节 (0xC0 - 0xDF) (0x80 - 0xBF),也可能在GB编码内
                            continue;
                        else
                            break;
                    } else if (0xE0 <= read && read <= 0xEF) {//也有可能出错,但是几率较小
                        read = bis.read();
                    if (0x80<= read && read <= 0xBF) {
                        read = bis.read();
                        if (0x80<= read && read <= 0xBF) {
                            charset = "UTF-8";
                            break;
                        } else
                            break;
                    } else
                        break;
                    }
                }
            }
            bis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return charset;
    }
        
        
        
        
        //删除附件信息表
        public void deleteRow(String FJXXBH)throws SQLException, WrongSQLException{
            String sql = "";
            Vector vec = null;
            
            //查询文件路径
            String fileName = "";
            sql = "select [文件路径] from [V_学生管理_附件信息表]  where 编号='" + MyTools.fixSql(FJXXBH) + "'";
            vec = db.GetContextVector(sql);
            if(vec.size()>0 && vec!=null)
                fileName = MyTools.fixSql(MyTools.StrFiltr(vec.get(0)));
            
            sql = "delete from [V_学生管理_附件信息表] where 编号='" + MyTools.fixSql(FJXXBH) + "' ";
            
            if(db.executeInsertOrUpdate(sql)){
                if(fileName.length()>0){
                    //截取文件名
                    fileName = fileName.substring(fileName.lastIndexOf("/")+1, fileName.lastIndexOf("."));
                    //删除相关文件
                    deleteFile(fileName);
                }
                
                this.setMSG("删除成功");//成功设置消息为<删除成功>
            }else{
                this.setMSG("删除失败");//失败设置消息为<删除成功>
            }
        }
        
        
        
    //删除相关文件    
    public boolean deleteFile(String fileName){
        boolean result = true;
        
        //获取配置路径
        String url = MyTools.getProp(request, "Base.JYWDStandardUpLoadPath");
        //删除该教学标准信息的上传文件及pwf文件
        File folder = new File(url);
        File temp = null;
        File[] filelist = folder.listFiles();//列出文件里所有的文件
        int loc = 0;
        for(int i=0; i<filelist.length; i++){//对这些文件进行循环遍历
            temp = filelist[i];
            loc = temp.getName().indexOf(fileName);//获取文件名字符的位置
            if(loc!=-1){//去掉后缀,如果文件名为该文件名的话就删除
                temp.delete();//删除文件
            }
        }
        
        return result;
    }
        
    
    
    
    
    
    public String getGX_FJXXBH() {
        return GX_FJXXBH;
    }

    public void setGX_FJXXBH(String gX_FJXXBH) {
        GX_FJXXBH = gX_FJXXBH;
    }

    public String getGX_FJXXWJM() {
        return GX_FJXXWJM;
    }

    public void setGX_FJXXWJM(String gX_FJXXWJM) {
        GX_FJXXWJM = gX_FJXXWJM;
    }

    public String getGX_FJXXTYPT() {
        return GX_FJXXTYPT;
    }

    public void setGX_FJXXTYPT(String gX_FJXXTYPT) {
        GX_FJXXTYPT = gX_FJXXTYPT;
    }

    public String getGX_FJXXWJLJ() {
        return GX_FJXXWJLJ;
    }

    public void setGX_FJXXWJLJ(String gX_FJXXWJLJ) {
        GX_FJXXWJLJ = gX_FJXXWJLJ;
    }

    public String getGX_FJXXYLLJ() {
        return GX_FJXXYLLJ;
    }

    public void setGX_FJXXYLLJ(String gX_FJXXYLLJ) {
        GX_FJXXYLLJ = gX_FJXXYLLJ;
    }

    public String getUSERCODE() {
        return USERCODE;
    }

    public void setUSERCODE(String uSERCODE) {
        USERCODE = uSERCODE;
    }


    public String getMSG() {
        return MSG;
    }

    public void setMSG(String mSG) {
        MSG = mSG;
    }
    
    
}

转换PDF代码:(注:此方法在Servlet层调用进行处理)

package or.og.jxldemo;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import com.pantech.base.common.tools.MyTools;
  

  
/** 
 * doc docx格式转换 
 *  
 * @author Administrator 
 *  
 */  
public class Office2SWF {  
    private static final int environment = 1;// 环境 1:windows 2:linux  
    // (只涉及pdf2swf路径问题)  
    private String fileString;  
    private String outputPath = "";//输入路径 ,如果不设置就输出在默认的位置  
    private String fileName;  
    private File pdfFile;  
    private File swfFile;  
    private File docFile;
    private String MSG;
    
    private HttpServletRequest request;
    
    public Office2SWF(HttpServletRequest request, String fileString) {
        this.request = request;
        init(fileString);  
    }  
   
    /** 
     * 重新设置file 
     *  
     * @param fileString 
     */  
    public void setFile(String fileString) {  
        init(fileString);  
    }  
  
    /** 
     * 初始化 
     *  
     * @param fileString 
     */  
    private void init(String fileString) {  
        this.fileString = fileString;  
        fileName = fileString.substring(0, fileString.lastIndexOf("."));  
        docFile = new File(fileString);  
        pdfFile = new File(fileName + ".pdf");  
        swfFile = new File(fileName + ".swf");  
    } 
    
    /** 
     * 转为PDF 
     *  
     * @param file 
     */  
    private void doc2pdf() throws Exception {  
        if (docFile.exists()) {  
            if (!pdfFile.exists()) {  
                try {
                    OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);  
                    connection.connect();  
                    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);  
                    converter.convert(docFile, pdfFile);  
                    // close the connection  
                    connection.disconnect();  
                    System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");  
                } catch (java.net.ConnectException e) {  
                    e.printStackTrace();  
                    System.out.println("****swf转换器异常,openoffice服务未启动!****");
                    Runtime rt = Runtime.getRuntime();
                    String batPath = MyTools.getProp(request, "Base.openofficeBatPath");
                    java.io.File file = new java.io.File(batPath);  
                    // 检查BAT文件是否存在  
                    if (file.isFile() && file.exists()) {
                         rt.exec(batPath);
                         this.setMSG("openoffice服务未启动");
                    }else{
                        this.setMSG("openofficeBat文件不存在");
                    }
                   
                    throw e;  
                } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {  
                    e.printStackTrace();  
                    System.out.println("****swf转换器异常,读取转换文件失败****");  
                    throw e;  
                } catch (Exception e) {  
                    e.printStackTrace();  
                    throw e;  
                }  
            } else {  
                System.out.println("****已经转换为pdf,不需要再进行转化****");  
            }  
        } else {  
            System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");  
        }  
    }
    
    /**
     * 转换成 swf
     */
    private void pdf2swf(boolean flag) throws Exception {
        Runtime r = Runtime.getRuntime();
        if (!swfFile.exists()) {
            if (pdfFile.exists()) {
                if (environment == 1) {// windows环境处理
                    try {
                        String swfToolsPath = MyTools.getProp(request, "Base.swfToolsPath");
                        Process p = r.exec(swfToolsPath + " "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9 -s languagedir=C:/xpdf/xpdf-chinese-simplified");
                        System.out.print(loadStream(p.getInputStream()));
                        System.err.print(loadStream(p.getErrorStream()));
                        System.out.print(loadStream(p.getInputStream()));
                        System.out.println("****swf转换成功,文件输出:"    + swfFile.getPath() + "****");
                        if (pdfFile.exists() && flag) { //pdf文件存在并且源文件不是PDF格式
                            pdfFile.delete();
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                        throw e;
                    }
                } else if (environment == 2) {// linux环境处理
                    try {
                        Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9 -s languagedir=C:/xpdf/xpdf-chinese-simplified");
                        System.out.print(loadStream(p.getInputStream()));
                        System.err.print(loadStream(p.getErrorStream()));
                        System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****");
                        if (pdfFile.exists()) {
                            pdfFile.delete();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        throw e;
                    }
                }
            } else {
                System.out.println("****pdf不存在,无法转换****");
            }
        } else {
            System.out.println("****swf已经存在不需要转换****");
        }
    }

    static String loadStream(InputStream in) throws IOException {
        int ptr = 0;
        in = new BufferedInputStream(in);
        StringBuffer buffer = new StringBuffer();

        while ((ptr = in.read()) != -1) {
            buffer.append((char) ptr);
        }

        return buffer.toString();
    }

    /**
     * 转换主方法
     */
    public boolean conver() {
        boolean flag = false;
        if (swfFile.exists()) {
            System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
            return true;
        }

        if (environment == 1) {
            System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
        } else {
            System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
        }
        try {
            if (!pdfFile.exists()) {
                flag = true;
                doc2pdf();
                pdf2swf(flag);
            }else{
                pdf2swf(flag);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        if (swfFile.exists()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 返回文件路径
     * 
     * @param s
     */
    public String getswfPath() {
        if (swfFile.exists()) {
            String tempString = swfFile.getPath();
            tempString = tempString.replaceAll("\\\\", "/");
            return tempString;
        } else {
            return "";
        }
    }

    /**
     * 设置输出路径
     */
    public void setOutputPath(String outputPath) {
        this.outputPath = outputPath;
        if (!outputPath.equals("")) {
            String realName = fileName.substring(fileName.lastIndexOf("/"),
                    fileName.lastIndexOf("."));
            if (outputPath.charAt(outputPath.length()) == '/') {
                swfFile = new File(outputPath + realName + ".swf");
            } else {
                swfFile = new File(outputPath + realName + ".swf");
            }
        }
    }
    
    /**
     *  Get&&Set方法
     */
    public String getFileString() {
        return fileString;
    }

    public void setFileString(String fileString) {
        this.fileString = fileString;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public File getPdfFile() {
        return pdfFile;
    }

    public void setPdfFile(File pdfFile) {
        this.pdfFile = pdfFile;
    }

    public File getSwfFile() {
        return swfFile;
    }

    public void setSwfFile(File swfFile) {
        this.swfFile = swfFile;
    }

    public File getDocFile() {
        return docFile;
    }

    public void setDocFile(File docFile) {
        this.docFile = docFile;
    }

    public String getOutputPath() {
        return outputPath;
    }
    
    public String getMSG() {
        return MSG;
    }

    public void setMSG(String msg) {
        MSG = msg;
    }

}

猜你喜欢

转载自www.cnblogs.com/bgyb/p/12189474.html