精华内容
下载资源
问答
  • 功能需求要求实现文档上传、下载、查看、删除,查看没弄过,别的就不提了,以下是我记录的实现文档在线查看的方法以及效果图 实现思路 首先把word文件转为pdf,然后在用js查看pdf文件实现在线查看功能。 主要...

    功能需求要求实现文档上传、下载、查看、删除,查看没弄过,别的就不提了,以下是我记录的实现文档在线查看的方法以及效果图

    实现思路

    首先把word文件转为pdf,然后在用js查看pdf文件实现在线查看功能。

    主要用到的知识点:

    1.word转pdf:

    导入包 com.aspose.words.Document;

    使用其中的

    //pathFile是doc路径

    Document document = new Document(pathFile.toString());

      //pathDirs+File.separator+wordDate+"_"+netWork+".pdf"是pdf路径

     File outputFile = new File(pathDirs+File.separator+wordDate+"_"+netWork+".pdf");

     //操作文档保存

     document.save(outputFile.getAbsolutePath(), com.aspose.words.SaveFormat.PDF);

    2.pdf通过response传给前台请求:(filePath是pdf的路径)

    public  void wrightWord(HttpServletRequest request, HttpServletResponse response,String filePath)

                throws ServletException, IOException {

            try {

                //获取所要下载的文件名称

                    String fileName=filePath.substring(filePath.lastIndexOf(File.separator)+1,filePath.length());

                String fileNameOld=fileName;

                //根据文件名获取 MIME 类型

                response.setCharacterEncoding("UTF-8");

                //设置ContentType字段值

                response.setContentType("application/pdf");

     

                if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {

                    fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); // firefox浏览器

                } else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {

                    fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器

                }else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) {

                    fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// 谷歌

                }

     

                //下载文件所在目录

                String folder=filePath.replace(fileName,"");

                

                response.addHeader("Content-type", "application/pdf");

     

                response.addHeader("Content-Disposition", "attachment;filename="+fileName);

                //通知文件流读取文件

                InputStream in  = new FileInputStream(filePath);

    //            InputStream in = getServletContext().getResourceAsStream(folder+filename);

                //获取response对象的输出流

                OutputStream out = response.getOutputStream();

                byte[] buffer = new byte[1024];

                int len;

                //循环取出流中的数据

                while((len = in.read(buffer)) != -1){

                    out.write(buffer,0,len);

                }

                out.flush();

                in.close();

                out.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    3.前台显示pdf文件,实现在线查看功能:

    其中showPDF是pdf容器,前边那个url是对应的请求获取pdf文件。外层那个div是用来展示pdf的,给用户感觉就是点击打开,返回页面关闭,没有放对应的css,主要就是js实现,这个自己灵活写。

    关键使用打开pdf文件的代码: PDFObject.embed("/spdbnb/file/showJys?netWork="+netWork+"&wordDate="+wordDate,"#showPDF");

    <div id="pdfDiv" style="display: none;height: 100%;width: 100%;z-index: 999">
        <a   href="javascript:void(0);" οnclick="rsrpallJYS.back()"style="color: #FFFFFF;">
            <div class="back-top">返回<br>页面</div>
        </a>
        <div id="showPDF" style="height: 100%;width: 100%;z-index: 9999999">
    </div>

    rsrpallJYS.showWord=function (){
                rsrpallJYS.closeShowDivForTerByJYS()
                $("#pdfDiv").show();
                PDFObject.embed("/spdbnb/file/showJys?netWork="+netWork+"&wordDate="+wordDate,"#showPDF");
            }

     

     

    收尾:用到的jar包和前台js脚本(貌似只能通过连接的方式,也可以自己找jar包com.aspose.words.Document;js包pdfobject.min.js)

    不喜欢找的,我也上传到这里了,点击csdn下载

     

    还有word转pdf的时候可能会出现中文乱码,如果,你在win环境下没事就是linux没有安装对应的字体:

    解决方法如下:https://blog.csdn.net/hanchuang213/article/details/64905214(别人的,如果不能打开了,就自己搜【使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常)】)

     

    本内容没有完整傻瓜式使用的全部代码,只放了关键代码。如果用到要转载请标明出处。

    展开全文
  • //处理乱码问题 //生成Word文档 template.process(dataMap, response.getWriter()); } catch (Exception e) { e.printStackTrace(); } finally { response.flushBuffer(); } } catch (Exception e) { e....

    以下对于生成doc文档来说哒,
    对于生成docx请移步https://blog.csdn.net/wantLight/article/details/106105416

    首先引入freemarker依赖

    <!--引入freemarker 模板依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
    

    示例Controller:

        @RequestMapping(value = "/export", method = RequestMethod.GET)
        public void downloadWord(HttpServletRequest request, HttpServletResponse response) {
            try {
    
                // 告诉浏览器用什么软件可以打开此文件
                response.setHeader("content-Type", "application/msword");
                // 下载文件的默认名称
                response.setHeader("Content-Disposition", "attachment;filename=xx分析.doc");
                Map<String, Object> dataMap = detailService.showWordDetail();
    
                //创建配置实例对象
                Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
                //设置编码
                configuration.setDefaultEncoding("UTF-8");
                //加载需要装填的模板
                //configuration.setClassForTemplateLoading(this.getClass(), "/");
                ClassPathResource classPathResource = new ClassPathResource("/files/");
                configuration.setDirectoryForTemplateLoading(classPathResource.getFile());
    
                //设置对象包装器
                configuration.setObjectWrapper(new DefaultObjectWrapper(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS));
    
                //设置异常处理器
                configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
                //获取ftl模板对象
                Template template = configuration.getTemplate("template.ftl");
                //输出文档
                StringBuilder fileName = new StringBuilder("啦啦啦啦.doc");
    
    //            if (StringUtils.isNotEmpty(data.getStudentName())) {
    //                fileName.append(data.getStudentName()).append("的简历").append(".doc");
    //            } else {
    //                fileName.append("默认简历").append(".doc");
    //            }
    
                try {
                    response.setContentType("application/octet-stream");
                    response.setHeader("Content-Disposition", "attachment;filename="
                            + new String(fileName.toString().getBytes("GBK"), "ISO-8859-1"));
                    response.setCharacterEncoding("utf-8");//处理乱码问题
                    //生成Word文档
                    template.process(dataMap, response.getWriter());
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    response.flushBuffer();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    word里面生成图片需要将图片转Base64:

     /**
         * 本地图片转换Base64的方法
         *
         * @param imgPath
         */
        public static String imageToBase64(String imgPath) {
            byte[] data = null;
            // 读取图片字节数组
            try {
                ClassPathResource classPathResource = new ClassPathResource(imgPath);
                InputStream in = classPathResource.getInputStream();
                data = new byte[in.available()];
                in.read(data);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回Base64编码过的字节数组字符串
            return encoder.encode(Objects.requireNonNull(data));
        }
    

    我的模板/图片路径都在resources/files下:对应传imgPath = files/图3.jpeg
    在这里插入图片描述
    需要替换的元素用${xxxxxx}占位符在word里替换了,如果有多条数据则添加<#list userList as user><#list>标签,userList是Map里的key。
    注意:符号字体格式一定要保持一致,否则会出现转xml后分隔的问题
    在这里插入图片描述
    比较好的办法是:doc中先不写变量,将doc转成xml,然后用doc打开这个xml,这时候加变量就好了,${name}就不会被分离了。建议使用notepad++,借助插件可以自动格式化xml文档

    注意:使用wps保存xml时要保存xml格式(03版的doc格式),否则会出现office 打不开的情况(或者图片无法加载)

    在这里插入图片描述

    图片出不来还有可能是w:name的后缀名与实际不符合,加${picStyle}替换后缀名~,还要注意前后标签要顶着你的占位符,不要换行或者有空白!!!
    在这里插入图片描述

    其它

    特殊字符的处理:
    ftl模板导出word时,如果填充的字符含有特殊字符< 、>、&,那么导出的word是无法打开的。
    转义字符对应的特殊符号:&lt; 对应< , &gt;对应> , &amp;对应&

    后记

    由于导出的doc格式太旧啦,这里需要将doc换成docx(同样使用freemarker的方式)。见我下一篇博客
    https://blog.csdn.net/wantLight/article/details/106105416

    展开全文
  • android 读word文档 doc docx xls xlsx

    热门讨论 2015-08-21 13:21:03
    安卓解析word文档 webView显示 花了三天写出来的 翻遍了网上所有的资料 可解析 doc docx xls xlsx格式 完整代码 里面带poi的包 所以有点大
  • js 导出word 文档 doc docx

    万次阅读 2019-11-11 14:32:27
    在做项目时,要将富文本编辑器,或是html内容 导出为word。 先引入文件保存js ...docx体积更小,而且word2007也可以打开 1.引用插件html-docx.js <script src="html-docx.js"></script>...

    在做项目时,要将富文本编辑器,或是html内容 导出为word。

    先引入文件保存js

    <script src="FileSaver.js"></script>

    导出为Docx

    docx体积更小,而且word2007也可以打开

    1.引用插件html-docx.js

    <script src="html-docx.js"></script>

    2.构建完整的html内容文档

    var content = '<!DOCTYPE html><html><head><meta charset="UTF-8"></head>'+ 要导出的html信息 +'</html>'

    content要导出的html信息,建议在服务端自己拼接完成。

    若是想从页面抓取html信息,可以用下面的方法(不建议,客户端消耗高

    html:

    <div id="content">
        要导出的html信息
        <img src="xxx">
    </div>
    
    function convertImagesToBase64 (content) {
          var regularImages = content.querySelectorAll("img");
          var canvas = document.createElement('canvas');
          var ctx = canvas.getContext('2d');
          [].forEach.call(regularImages, function (imgElement) {
            // preparing canvas for drawing
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            canvas.width = imgElement.width;
            canvas.height = imgElement.height;
    
            ctx.drawImage(imgElement, 0, 0);
            // by default toDataURL() produces png image, but you can also export to jpeg
            // checkout function's documentation for more details
            var dataURL = canvas.toDataURL();
            imgElement.setAttribute('src', dataURL);
          })
          canvas.remove();
        }
    var content = document.getElementById('#content');
    convertImagesToBase64(content);//转换图片为base64
    
    content = '<!DOCTYPE html><html><head><meta charset="UTF-8"></head>'+ content +'</html>'

    3.利用脚本导出word

     var converted = htmlDocx.asBlob(content);
     saveAs(converted, 'test.docx');// 用 FielSaver.js里的保存方法 进行输出

    导出为Doc

    利用wordjquery 这个

    1.引入jquery和wordexport

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script src="wordexport.js"></script>

    2.使用导出

    $(元素).wordExport(文件名,isBase64)

    isBase64 用于标识 元素中的图片是否都处理为了base64,默认为false,内置处理方法,可以去看看

    注意

    无论是html-docx.js还是 wordexport.js 都需要将html中的图片转为base64形式

    而且,图片的宽度高,最好自己设置下,否则下载的图片会以图片原始大小下载,就会出现以下,图片在文档超出情况

    处理图片的宽高,可以采用 正则替换,这里给出两种替换参考(平时不太写正则,所以有点挫)

    C#:

    string reg = "<img.*? src=[\"'](.*?)['\"].*?>";
    MatchCollection collections = Regex.Matches(description, reg);
    if (collections.Count > 0)
    {
        foreach (Match match in collections)
        {
            Regex regWidth = new Regex("width\\s*=\\s*\\S+ ");
            if (!regWidth.IsMatch(img))//img 中不存在width 
            {
                //获取其他属性进行替换
                Regex reg1 = new Regex(@"style\s*=(['""\s]?)[^'""]*?\1"); ;
                img = reg1.Replace(img, "width=\"350\" height=\"216\" ");//按黄金比例替换
            }
            else
            {
                Match mathWidth = regWidth.Match(img);
                if (mathWidth.Success)
                {
                    string widh = mathWidth.Value.Substring(7).Substring(0, mathWidth.Value.Substring(7).Length - 2);//width
                    if (int.Parse(widh) > 400) {//原宽超出400
                        Regex regHeight = new Regex(@"height\s*=(['""\s]?)[^'""]*?\1");
                        Match mathHeight = regHeight.Match(img);
                        if (mathHeight.Success)
                        {
                            string height = mathHeight.Value.Substring(8).Substring(0, mathHeight.Value.Substring(8).Length - 1);
                            img = regHeight.Replace(img, "height=\" " + 350 * int.Parse(height) / int.Parse(widh) + "\"");//按比例替换 高
                        }
                        img = regWidth.Replace(img, "width=\"350\"");
                    }
                }
            }
        }
    }

    若是二进制流存储的图片数据,可以通过Bitmp来读取原始大小 ,然后按照原始比例再进行缩放

    //通过二进制流 获取图片原始宽高
    private int[] GetScaleImgSizeByByte(byte[] image)
    {
        MemoryStream stream = new MemoryStream(image);//内存流写入
        Bitmap bmp = new Bitmap(stream);
        int width = 600;//先指定一个固定大小 和word页面边距最大宽差不多
        int height = 600;
        if (bmp.Width > 600)
        {
            height = (int)(width * ((double)bmp.Height / (double)bmp.Width));
        }
        if (height > 600 || bmp.Height > 600)
        {//调完宽后判断高 
            height = 600;
            width = (int)(height / ((double)bmp.Height / (double)bmp.Width));
        }
        return new int[] { width, height };
    }

    js正则替换:

     var str = htmlText.replace(/(<img[^>]*)(\/?>)/gi, function (match, capture) {
         if(match.match(/width\s*?=\s*?([‘"])[\s\S]*?\1/ig)==null)
         match = match.replace(/(<img[^>]*)(\/?>)/gi,"$1 width='350' $2")//没有宽就增加宽
         return match.replace(/style\s*?=\s*?([‘"])[\s\S]*?\1/ig, '').replace(/width\s*?=\s*?([‘"])[\s\S]*?\1/ig ,"width='350'");
    });

     

    展开全文
  • 这是一个使用c#做的winform界面,它的用处是,批量生成按规定列的word文档,比如,王一.docx,王一.docx,王零.docx,王二.docx,王三.docx,省得用手再一个一个的建文档了。代码在这...
  • 因为功能需要富文本直接编写富文本生成word文档,需要实现以下功能,以下功能已被封装,目前百度到的生成的word文件打开会乱码报文件内容错误,这个解决了乱码的问题 /** * html内容转word文档 * $content 富文本...

    因为功能需要富文本直接编写富文本生成word文档,需要实现以下功能,以下功能已被封装,目前百度到的生成的word文件打开会乱码报文件内容错误,这个解决了乱码的问题

    
    /**
    * html内容转word文档并保存docx文件
    * $content 富文本内容
    */ 
    function generate_word($content){
    	//文件名称及后缀
        $name = date('YmdHis').'.docx';
        //拼接完整的文件地址 如果是目录需要提前建好目录 
        $fileName = './public/docx/'.$name;
        //解决乱码的问题
        $content ='<html 
                xmlns:o="urn:schemas-microsoft-com:office:office" 
                xmlns:w="urn:schemas-microsoft-com:office:word" 
                xmlns="http://www.w3.org/TR/REC-html40">
                <meta charset="UTF-8" />'.$content.'</html>';
        //创建文件  不会自动生成目录
        $ret = file_put_contents($fileName, $content);
        if(!$ret){
    	    //生成错误 返回失败
        	return false;
    	}else{
    		//生成成功 返回完整的文件地址
    		return $fileName;
    	}
    }
    
    

    小结
    认真看完代码中的注释,真的很帮助我们的开发哦.
    感谢您的阅读~~

    展开全文
  • //把doc格式转换成docx //导入 Spire.Doc.jar Document d = new Document("F:\\**\\**\\云想.doc"); d.saveToFile("F:\\**\\**\\云想.docx");
  • java读取word文档里面的内容(包括docdocx格式)

    千次阅读 热门讨论 2019-11-30 20:19:47
    java读取word文档里面的内容(包括docdocx格式) java读取word文档里面的内容(包括docdocx格式),使用POI架包 使用的POI架包如下 poi-3.16.jar poi-examples-3.16.jar poi-excelant-3.16.jar poi-ooxml-3.16.jar ...
  • POI解析word文档,支持DOCDOCX版本

    千次阅读 2017-06-15 17:14:00
    2019独角兽企业重金招聘Python工程师标准>>> ...System.out.println("解析DOCX格式的word文档!"+text); 转载于:https://my.oschina.net/zupengliu/blog/967762
  • 大家在使用office2003Word文档的时候发现打不开docx格式的文档,这个时候就需要把docx格式转换成doc...office2003Word文档docx格式怎么转换成doc格式方法:首先看下我们文档的格式为 *.docx, 这个*.docx是office20...
  • 之前的一个需求写成了一个依赖库,主要就是实现可以在app里打开word文档,不用去调一些其他的wps等等的第三方软件。先提供一个其他思路,集成腾讯TBS,大厂的SDK还是不错的,效果就自己试试吧。 我的依赖库是基于...
  • docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件直接改成.zip,解压后,里面的 word/document.xml包含了Word文档的大部分内容,图片文件则保存在word/media里面。 docx包 python-docx不支持.doc文件...
  • Python读写docx文件+介绍Python读写word文档有现成的库可以处理。我这里采用 python-docx。可以用pip install python-docx安装一下。这里说一句,ppt和excel也有类似的库哦,而且是直接读取文件里面的xml数据。所以...
  • 关于python如何处理word文档doc docx,可以关注 python-docx 和 python-docx2txt 两个项目,python-docx复杂一些,适合创建文档,python-docx2txt可以方便将文档转换成txt: ...
  • 使用poi+spire+word模板生成doc/docx

    千次阅读 2020-05-06 22:30:52
    docdocx区别:97-2003的旧版本文件名后缀就是.doc 从2007版以后后缀名是.docx(由于版本问题...poi+word模板生成word文档地址 到这里使用poi +word模板生成word就结束了. 使用Spire.doc替换word中的文字内容 1、...
  • 主要介绍了C#编程读取文档DocDocx及Pdf内容的方法,涉及C#操作COM组件读取Doc、Docx及Pdf文档的相关技巧,需要的朋友可以参考下
  • 此工程功能为doc/docx文档批量转换XML文档,附带源代码源代码。
  • 1.利用freemarker的语法 把doc文件转换成XML文件,再转换成ftl文件,以ftl文件作为模板生成word文档 2.以word文档作为模板,利用freemarker的语法快速生成word文档 注意: 1.第一种方法适用docdocx但是,这种方法...
  • 可以简单的将Word文档Docx格式转换为Doc格式
  • pdf转换成word转换器免费版是一款专业的pdf转换成word软件,完美支持pdf文件转换成word文档,转换后可再次编辑,支持图文混合排版,支持表格转换,支持批量转换,操作简单。pdf转换成word转换器免费不限页数可以很好...
  • Word To PDF (doc, docx) 介绍Word To PDF (doc, docx)Convert .doc, .docx, .odt, .ott and .rtf to pdfPerfect support conversion from DOCX.Best conversion from DOC, read images, graphs, tables, etc....
  • 分享自己用js做的在线word文档编辑器oarword 支持基本doc/docx文档编辑,导出和导出,类似google docs和zoho 源码分享在Github:https://github.com/airxiechao/oarword   目前只支持Google Chrome浏览器!  ...
  • Python操作Word文档(python-docx

    千次阅读 2020-07-09 16:01:01
    需求:生成word文档并返回url地址: # -*- coding:utf-8 -*- # 消费者 import base64 import json import os import smtplib import time from email.mime.multipart import MIMEMultipart from email.mime.text ...
  • Python读取word文档(python-docx包)

    万次阅读 2017-08-15 09:23:44
    最近想统计word文档中的一些信息,人工统计的话。。。三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.readthedocs.io/en/latest/index.html (v...
  • worddocdocx)转换成html 然后可以调用网页控件将其显示出来

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,646
精华内容 5,058
关键字:

word文档是doc还是docx