精华内容
下载资源
问答
  • Word 文档转变成网页并显示

    千次阅读 2019-04-26 21:50:38
    1、确定选中的是不是Word文档 2、将文件保存到指定的文件夹中 3、将word转换HTML 4、精简筛选 5、保存最终结果 一、确定选中的是是不是Word文档 假设上传文件的名为:批量导入模板.docx; IE浏览器和其他...

    开发工具与关键技术:VS/MVC
    作者:何桂朋
    撰写时间:2019年4月20日

    我认为在ASP.NET MVC中,要想将Word 文档转变成网页并显示到页面上,需要以下五步:
    1、确定选中的是不是Word文档
    2、将文件保存到指定的文件夹中
    3、将word转换HTML
    4、精简筛选
    5、保存最终结果
    一、确定选中的是是不是Word文档
    假设上传文件的名为:批量导入模板.docx;
    IE浏览器和其他浏览器捕捉的文件名不一样,IE浏览器捕捉的文件名是带有“绝对定位的路径”。针对IE浏览器上传的文件名做一些处理。

    //主要处理IE浏览器上传的文件名
    string[] str = FileName.Split('\\')
    //获取最后的数据,获取到文件名称
    FileName = str[str.Length - 1];
    通过GetExtension() 返回指定的路径字符串的扩展名,以获取文件的扩展名。
    然后判断文件类型是不是".doc||.docx"。
    

    二、将文件保存到指定的文件夹中

    //文件名称
    string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + FileName;
    //检查目录是否存在,不存在就创建
    if (!Directory.Exists(Server.MapPath("~/Document/Title/Temp/")))
    {//创建目录/Document/Notice/
    Directory.CreateDirectory(Server.MapPath("~/Document/Title/Temp/"));
    }
    string filePath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), fileName); //SaveAs 保存上载文件的内容
    file.SaveAs(filePath);
    

    文件重新命名是为了使其唯一,预防查找的时候出现名字相同
    Path.Combine(),可以拼接两个参数的路径。
    文件(file)通过SaveAs()保存到其参数路径中;

    三、将word转换HTML

    // html文件的文件名称
    string htmlName =fileName.Replace(fileExtension, ".html");
    //html文件的保存路径
    string htmlPath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), htmlName);
    Document document = newDocument(filePath);//将文件读取到document中
    document.SaveToFile(htmlPath, FileFormat.Html);//将文件转化成HTML文档并保存
    

    Document 可以将参数的内容读取出来。
    SaveToFile将document转化成Html文档并在 htmlPath 路径中保存起来。

    四、精简筛选
    用正则表达式去掉 注释、\r回车 \n换行符、span标签和 、除去多余的样式

    //ReadAllText读取文件内容,返回一个包含文件所有行的字符串 
    string strhtml =System.IO.File.ReadAllText(htmlPath);
    //替换 html中的 给p标签添加一个自定义属性,若有pre标签,则替换成p标签
    strhtml = Regex.Replace(strhtml, "</pre>", "</p>");
    strhtml = Regex.Replace(strhtml, "<p|<pre", "<preg=\"demo\""); 
    //去掉 style后面的样式
    strhtml = Regex.Replace(strhtml, "style=\".+?(?=\")\"", "");
    //正则表达式获取所有的p标签
    MatchCollection matchPList =
    Regex.Matches(strhtml, "<preg=\"demo\"[\\w\\W\\r\\n]*?></p>");
    

    五、保存最终结果

    //保存最终结果
    List<Dictionary<string, string>> listLast = newList<Dictionary<string, string>>();
    //保存所有段落
    //将符合段落内容格式的字符串保存在列表中
    //抽取p标签中的文字图片内容
    for (int i = 1; i < matchPList.Count; i++)
    {
    string strP = matchPList[i].Value;
    //因为p标签中可能存在多个文字与图片,所以使用List保存 精简筛选
    string c = getImages(strP);
    Dictionary<string, string> dic = newDictionary<string, string>();
    dic.Add(i.ToString(),c);
    listLast.Add(dic);
    }
    string strOutHtml = "";
    foreach (Dictionary<string, string> listitem in listLast) {
    foreach (string item in listitem.Values) {
    strOutHtml += item;
    }
    strOutHtml += "
    ";
    }
    //将抽取的结果构建成显示的html
    msg.State = true;
    msg.Text = strOutHtml;
    

    到此就结束了。

    展开全文
  • 我用WPS新建word文档作者是我电脑的名字hufk,为什么随便编辑一下,就变成了zhaoxinlei?会不会是电脑被写入木马了?
  • word文档属性自定义We recently showed you how to set the user information in Word. Word also stores several additional advanced properties related to your documents. Some of these are displayed on the ...
    word文档属性自定义

    word文档属性自定义

    00_lead_image_entering_summary_info

    We recently showed you how to set the user information in Word. Word also stores several additional advanced properties related to your documents. Some of these are displayed on the “Info” screen and you can change these properties.

    最近,我们向您展示了如何在Word中设置用户信息。 Word还存储与您的文档相关的几个其他高级属性。 其中一些显示在“信息”屏幕上,您可以更改这些属性。

    NOTE: We used Word 2013 to illustrate this feature.

    注意:我们使用Word 2013来说明此功能。

    To access the dialog box that allows you to change the properties for the currently open document, click the “File” tab.

    要访问允许您更改当前打开的文档的属性的对话框,请单击“文件”选项卡。

    01_clicking_file_tab

    By default, the “Info” screen should display. If not, click “Info” at the top of the list of items on the left.

    默认情况下,应显示“信息”屏幕。 如果没有,请单击左侧项目列表顶部的“信息”。

    02_make_sure_info_screen_is_active

    On the right side of the “Info” screen, click “Properties” and select “Advanced Properties” from the drop-down list.

    在“信息”屏幕的右侧,单击“属性”,然后从下拉列表中选择“高级属性”。

    03_selecting_advanced_properties

    A dialog box displays with the file name (without the file extension) on the title bar, showing you information about your document. To access the properties you can change, click the “Summary” tab.

    在标题栏上显示一个带有文件名(无文件扩展名)的对话框,向您显示有关文档的信息。 要访问可以更改的属性,请单击“摘要”选项卡。

    04_clicking_summary_tab

    Enter properties on the “Summary” tab such as “Title,” “Author,” “Company,” and “Keywords.” Keywords are also called tags and can be used to categorize and find your document more easily.

    在“摘要”选项卡上输入属性,例如“标题”,“作者”,“公司”和“关键字”。 关键字也称为标签,可用于更轻松地分类和查找文档。

    05_entering_summary_info

    You are returned to the “Info” screen and the advanced properties you entered display. The keywords you entered are displayed as “Tags.”

    您将返回到“信息”屏幕,并显示您输入的高级属性。 您输入的关键字显示为“标签”。

    06_properties_displaying_on_info_screen

    You can also display and change the advanced properties in a “Document Information Panel” above the document. To show the panel, click “Properties” on the “Info” screen and select “Show Document Panel.”

    您还可以在文档上方的“文档信息面板”中显示和更改高级属性。 要显示面板,请在“信息”屏幕上单击“属性”,然后选择“显示文档面板”。

    07_selecting_show_document_panel

    You are automatically returned to your document where the “Document Information Panel” displays below the ribbon. For each property, there’s an edit box displaying the current value for the property and allowing you to change the values. You can also use the “Document Properties” button on the panel to access the properties dialog you can also use to edit the properties and view other information.

    您将自动返回到文档,在功能区下方显示“文档信息面板”。 对于每个属性,都有一个编辑框,显示该属性的当前值并允许您更改值。 您还可以使用面板上的“文档属性”按钮来访问属性对话框,还可以用于编辑属性和查看其他信息。

    08_document_panel

    To close the panel, click the “X” button in the upper-right corner of the panel.

    要关闭面板,请单击面板右上角的“ X”按钮。

    09_closing_document_info_panel

    In a future article, we will be showing you how you can insert these advanced properties into your documents so they will automatically update when you change them.

    在以后的文章中,我们将向您展示如何将这些高级属性插入文档中,以便它们在更改时自动更新。

    翻译自: https://www.howtogeek.com/216295/how-to-set-the-advanced-properties-of-a-word-document/

    word文档属性自定义

    展开全文
  • QT读取Word文档

    千次阅读 2020-06-08 20:07:34
    Word文档读取 开发工具与关键技术:QtCreator、C++ 作者:何任贤 撰写时间:2020年06月02日 Word文档读取 我们先要在工程文件加入 QT += axcontainer 我们要用到的头文件有 #include #include 读取word文档基本...

    Word文档读取

    开发工具与关键技术:QtCreator、C++
    作者:何任贤
    撰写时间:2020年06月02日
    

    Word文档读取
    我们先要在工程文件加入
    QT += axcontainer
    我们要用到的头文件有
    #include
    #include
    读取word文档基本流程:

    1. 启动Word进程、获取Word文档集。
    2. 获取和操作当前选中的段落。
      类声明
      class Dialog : public QDialog
      {
      Q_OBJECT
      public:
      Dialog(QWidget *parent = 0);
      ~Dialog();

    private slots:
    void readWord();

    private:
    QPushButton *writebtn;
    QPushButton *readbtn;
    QLineEdit *lineedit;

    必须要声明的指针
    QAxObject *myword;      //Word应用程序指针
    QAxObject *mydocs;      //文档集指针
    QAxObject *mydoc;       //文档指针
    QAxObject *selection;   //Selection指针
    

    };

    下面是qt读取word文档函数实现
    void Dialog::readWord()
    {
    打开一个Word应用程序
    myword = new QAxObject(“Word.Application”);

    找到其Documents子对象,代表Word文档集
    mydocs = myword->querySubObject("Documents");
    

    获取要读取的word文档的路径。
    QString path = QDir::currentPath() + “/myWord.docx”;
    path = QDir::toNativeSeparators(path);

    打开一个Word文档,这里调用的是Documents对象的open方法
    mydocs->dynamicCall("Open(const QVariant&)",QVariant(path));
    
    获取当前word文档对象
    mydoc= myword->querySubObject("ActiveDocument");
    
    这里是把word文档的内容全部选中。
    通过不带参数的range方法选中整个文档内容
    selection = mydoc->querySubObject("Range()");
    
    然后获取选中的word文档内容
    QString str = selection->property("Text").toString();
    
    lineedit->setText(str);
    
    关闭文档
    mydoc->dynamicCall("Close()");
    delete mydoc;
    mydoc = NULL;
    
    退出程序
    myword->dynamicCall("Quit()");
    delete myword;
    myword = NULL;
    
    QMessageBox::information(this,tr("消息"),str);
    

    }
    下面是读取结果
    在这里插入图片描述

    展开全文
  • word文档保护时,默认是突出显示可编辑区域的,效果是可编辑区域是黄色的。怎么能够使文档打开时默认为不突出显示
  • Swagger文档Word 文档

    千次阅读 2019-06-13 09:10:00
    点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:JmCuicnblogs.com/jmcui/p/8298823.html技术经验交流:点击入群一...

    点击上方“Java知音”,选择“置顶公众号”

    技术文章第一时间送达!


    作者:JmCui

    cnblogs.com/jmcui/p/8298823.html


    技术经验交流:点击入群

    一、前言

    为什么会产生这个需求呢?

    我们公司作为乙方,老是被客户追着要一份API文档,当我们把一个 Swagger 文档地址丢给客户的时候。客户还是很不满意,嫌不够正式!!死活坚持要一份 word 文档 。然后领导给了个接口模板,就把这个活交给我了……我去,近10个微服务,几百个接口,这不得要了我的命啊(最后整理出来将近200页的 word 文档)。最后,还是领导有办法:要不我们把Swagger的 json文件转成word文档吧!

    一直坚持一句话。作为使用者,人要迁就机器;作为开发者,要机器迁就人。

    二、思路

    领导提供了一个接口模板,类似下面这样,其实就是一个word的table页。想到 html 可以转 word ,那么问题就变成了 :

    • 解析JSON 文件

    • 把JSON文件的内容填充进html 的Table中

    • 由html直接转成word

    几百个接口,一气呵成!如下,还有一个简单的示例,就是请求参数 和 返回值 。怎么处理呢?在程序中写了 HTTP 的请求,封装了需要的参数去执行了一个请求,得到相应的返回值!

    640?wx_fmt=png

    三、实现

    1、封装对象

    按照面向对象的思想,一个接口Table就是一个对象,可变的请求参数和返回参数也封装成一个对象……

    640?wx_fmt=png

    Table


    Request


    public class Request {

        /**
         * 请求参数
         */

        private String description;

        /**
         * 参数名
         */

        private String name;

        /**
         * 数据类型
         */

        private String type;

        /**
         * 参数类型
         */

        private String paramType;

        /**
         * 是否必填
         */

        private Boolean require;

        /**
         * 说明
         */

        private String remark;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public Boolean getRequire() {
            return require;
        }

        public void setRequire(Boolean require) {
            this.require = require;
        }

        public String getRemark() {
            return remark;
        }

        public void setRemark(String remark) {
            this.remark = remark;
        }

        public String getParamType() {
            return paramType;
        }

        public void setParamType(String paramType) {
            this.paramType = paramType;
        }
    }


    Response


    public class Response {
        /**
         * 返回参数
         */

        private String description;

        /**
         * 参数名
         */

        private String name;

        /**
         * 说明
         */

        private String remark;

        public Response(String description, String name, String remark) {
            this.description = description;
            this.name = name;
            this.remark = remark;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getRemark() {
            return remark;
        }

        public void setRemark(String remark) {
            this.remark = remark;
        }
    }

    2、解析 json

    先来看看Swagger json文件的格式吧!需要注意的是这个 json 文件默认的 host 是没有加 http:// 前缀的,需要我们手动加上,因为程序的HTTP请求不像浏览器一样会自动补上 http:// 的前缀 ……

    640?wx_fmt=png

    解析JSON真是一件枯燥的工作,大家可以按照自己想要生成模板的样子修改这边的代码……需要提的是,这里有一点让我纠结了好久。怎么伪造接口的请求参数发送HTTP请求以避免不会抛异常呢?最后还是参考了Swagger的方式,即:如果是 String 类型的参数,就把这个参数置为"string";如果是 Integer 类型的参数,就把这个参数置为 0 ;如果是Double 类型的参数,就置为 0.0 ;如果是其他没办法预见的类型,就全部置为 null;

    解析 JSON 用的是Spring推荐的 jackson ,这部分感觉没什么好说的,直接上代码吧!

    @Service
    public class TableServiceImpl implements TableService {

        @Override
        public List<Table> tableList() {
            List<Table> list = new LinkedList();
            try {
                ClassLoader classLoader = TableService.class.getClassLoader();
                URL resource = classLoader.getResource("data.json");
                Map map = new ObjectMapper().readValue(resource, Map.class);
                //得到host,用于模拟http请求
                String host = String.valueOf(map.get("host"));
                //解析paths
                LinkedHashMap<String, LinkedHashMap> paths = (LinkedHashMap) map.get("paths");
                if (paths != null) {
                    Iterator<Map.Entry<String, LinkedHashMap>> iterator = paths.entrySet().iterator();
                    while (iterator.hasNext()) {
                        Table table = new Table();
                        List<Request> requestList = new LinkedList<Request>();
                        String requestType = "";

                        Map.Entry<String, LinkedHashMap> next = iterator.next();
                        String url = next.getKey();//得到url
                        LinkedHashMap<String, LinkedHashMap> value = next.getValue();
                        //得到请求方式,输出结果类似为 get/post/delete/put 这样
                        Set<String> requestTypes = value.keySet();
                        for (String str : requestTypes) {
                            requestType += str + "/";
                        }
                        Iterator<Map.Entry<String, LinkedHashMap>> it2 = value.entrySet().iterator();
                        //解析请求
                        Map.Entry<String, LinkedHashMap> get = it2.next();//得到get
                        LinkedHashMap getValue = get.getValue();
                        String title = (String) ((List) getValue.get("tags")).get(0);//得到大标题
                        String tag = String.valueOf(getValue.get("summary"));
                        //请求体
                        ArrayList parameters = (ArrayList) getValue.get("parameters");
                        if (parameters != null && parameters.size() > 0) {
                            for (int i = 0; i < parameters.size(); i++) {
                                Request request = new Request();
                                LinkedHashMap<StringObject> param = (LinkedHashMap) parameters.get(i);
                                request.setDescription(String.valueOf(param.get("description")));
                                request.setName(String.valueOf(param.get("name")));
                                request.setType(String.valueOf(param.get("type")));
                                request.setParamType(String.valueOf(param.get("in")));
                                request.setRequire((Boolean) param.get("required"));
                                requestList.add(request);
                            }
                        }
                        //返回体,比较固定
                        List<Response> responseList = listResponse();
                        //模拟一次HTTP请求,封装请求体和返回体,如果是Restful的文档可以再补充
                        if (requestType.contains("post")) {
                            Map<StringString> stringStringMap = toPostBody(requestList);
                            table.setRequestParam(stringStringMap.toString());
                            String post = NetUtil.post(host + url, stringStringMap);
                            table.setResponseParam(post);
                        } else if (requestType.contains("get")) {
                            String s = toGetHeader(requestList);
                            table.setResponseParam(s);
                            String getStr = NetUtil.get(host + url + s);
                            table.setResponseParam(getStr);
                        }

                        //封装Table
                        table.setTitle(title);
                        table.setUrl(url);
                        table.setTag(tag);
                        table.setResponseForm("application/json");
                        table.setRequestType(StringUtils.removeEnd(requestType, "/"));
                        table.setRequestList(requestList);
                        table.setResponseList(responseList);
                        list.add(table);
                    }
                }
                return list;

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }


        //封装返回信息,可能需求不一样,可以自定义
        private List<Response> listResponse() {
            List<Response> responseList = new LinkedList<Response>();
            responseList.add(new Response("受影响的行数""counts"null));
            responseList.add(new Response("结果说明信息""msg"null));
            responseList.add(new Response("是否成功""success"null));
            responseList.add(new Response("返回对象""data"null));
            responseList.add(new Response("错误代码""errCode"null));
            return responseList;
        }

        //封装post请求体
        private Map<StringString> toPostBody(List<Request> list) {
            Map<StringString> map = new HashMap<>(16);
            if (list != null && list.size() > 0) {
                for (Request request : list) {
                    String name = request.getName();
                    String type = request.getType();
                    switch (type) {
                        case "string":
                            map.put(name, "string");
                            break;
                        case "integer":
                            map.put(name, "0");
                            break;
                        case "double":
                            map.put(name, "0.0");
                            break;
                        default:
                            map.put(name, "null");
                            break;
                    }
                }
            }
            return map;
        }

        //封装get请求头
        private String toGetHeader(List<Request> list) {
            StringBuffer stringBuffer = new StringBuffer();
            if (list != null && list.size() > 0) {
                for (Request request : list) {
                    String name = request.getName();
                    String type = request.getType();
                    switch (type) {
                        case "string":
                            stringBuffer.append(name+"&=string");
                            break;
                        case "integer":
                            stringBuffer.append(name+"&=0");
                            break;
                        case "double":
                            stringBuffer.append(name+"&=0.0");
                            break;
                        default:
                            stringBuffer.append(name+"&=null");
                            break;
                    }
                }
            }
            String s = stringBuffer.toString();
            if ("".equalsIgnoreCase(s)){
                return "";
            }
            return "?" + StringUtils.removeStart(s, "&");
        }
    }

    3、html 模板

    我们需要一个和 Word Table 模板一样的HTML 页面,然后利用JSP的 foreach 遍历后台得到的 List<Table>集合,一气呵成,生成所有接口……

    <%-- text/html:正常的html显示  application/msword:html页面直接转word--%><%@ page contentType="application/msword" pageEncoding="UTF-8" language="java" %><%--<%@page contentType="text/html" pageEncoding="UTF-8" language="java" %>--%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
        <head>
            <title>tool</title>
            <style type="text/css">
                .bg {
                background-colorrgb(84, 127, 177);
                }

                tr {
                height20px;
                font-size12px;
                }

                .specialHeight {
                height40px;
                }
            
    </style>
        </head>
        <body>
            <div style="width:800px; margin: 0 auto">
                <c:forEach items="${table}" var="t">
                    <h4>${t.title}</h4> 
    <%--这个是类的说明--%>
                    <h5>${t.tag}</h5>   
    <%--这个是每个请求的说明,方便生成文档后进行整理--%>
                    <table border="1" cellspacing="0" cellpadding="0" width="100%">
                        <tr class="bg">
                            <td colspan="6"><c:out value="${t.tag}"/></td>
                        </tr>
                        <tr>
                            <td>URL</td>
                            <td colspan="5">${t.url}</td>
                        </tr>
                        <tr>
                            <td>请求方式</td>
                            <td colspan="5">${t.requestType}</td>
                        </tr>
                        <tr>
                            <td>返回值类型</td>
                            <td colspan="5">${t.responseForm}</td>
                        </tr>

                        <tr class="bg" align="center">
                            <td>请求参数</td>
                            <td>参数名</td>
                            <td>数据类型</td>
                            <td>参数类型</td>
                            <td>是否必填</td>
                            <td>说明</td>
                        </tr>
                        <c:forEach items="${t.requestList}" var="req">
                            <tr align="center">
                                <td>${req.description}</td>
                                <td>${req.name}</td>
                                <td>${req.type}</td>
                                <td>${req.paramType}</td>
                                <td>
                                    <c:choose>
                                        <c:when test="${req.require == true}">Y</c:when>
                                        <c:otherwise>N</c:otherwise>
                                    </c:choose>
                                </td>
                                <td>${remark}</td>
                            </tr>
                        </c:forEach>
                        <tr class="bg" align="center">
                            <td>返回参数</td>
                            <td>参数名</td>
                            <td colspan="4">说明</td>
                        </tr>

                        <c:forEach items="${t.responseList}" var="res">
                            <tr align="center">
                                <td>${res.description}</td>
                                <td>${res.name}</td>
                                <td colspan="4">${res.remark}</td>
                            </tr>
                        </c:forEach>

                        <tr class="bg">
                            <td colspan="6">示例</td>
                        </tr>
                        <tr class="specialHeight">
                            <td class="bg">请求参数</td>
                            <td colspan="5">${t.requestParam}</td>
                        </tr>
                        <tr class="specialHeight">
                            <td class="bg">返回值</td>
                            <td colspan="5">${t.responseParam}</td>
                        </tr>
                    </table>
                    <br>
                </c:forEach>
            </div>
        </body>
    </html>

    4、效果

    把代码运行起来后,访问JSP页面,不会像平常一样看到 HTML 页面,而是直接下载生成一个 文件,按照SpringMVC请求方法命名(这个项目中是getWord文件)。把这个文件的后缀名改成 .doc 就能看到效果了!差不多是如下效果:

    640?wx_fmt=png

    当然,剩下的工作,就要我们手动去整理维护了。比如:把属于同一个类的请求分类整理到一起;把HTTP请求错误的返回值删除(还无法适配所有的HTTP请求情况);整理维护效果如下:

    640?wx_fmt=png

    四、使用

    如果直接采用我的API文档模板的话,只需要将 resources 目录下的 data.json 文件的内容替换成自己的Swagger Json 文件内容就好。但是,考虑到我们模板中的返回参数是我们公司一个自定义的对象,所以可能这里还需要大家根据自己的要求稍作修改,主要 修改TableServiceImpl 类下的 listResponse() 方法。

    需要说明的是,这个项目还没有很好的支持所有的HTTP请求,比如 restful 服务将请求参数放在请求路径中的;比如参数是放在header中的;以及一系列可能没有考虑到的bug……

    另外,我觉得 TableServiceImpl 还有很大可以改善的地方,代码略显冗余。之后慢慢维护吧!当然,很欢迎大家一起来开发…哈哈

    五、结语

    一直觉得,IT最迷人的地方就是开源和分享,大家互不相识,即使没有利益可图,却能为同一个项目,相同的目标 贡献自己的时间和精力。想想就不可思议。写这个博文的目地更多是分享自己的创意和想法,说实话,代码可能写的有点烂。还请大家不要嫌弃,不吝指教!

    六、更新说明

    之前看《Spring In Action》的时候,发现了 RestTemplate 这个东西, 作为取代 HttpClients 的请求方式。当时就在想,要是放在这个项目中不是恰到好处?

    更新说明如下:

    1、引入了Spring的RestTemplate取代 HttpClients 以支持更多的Restful请求。
    2、命名规范以及增加异常处理,对于无法处理的HTTP请求返回空字符串。
    3、修改之前导入data.josn的方式,变成restTemplate.getForObject("SwaggerJson的url地址",Map.class);的动态获取方式。

    现在的使用方式也更加简单:

    1、修改resources目录下resources.properties文件的 swaggerUrl 为Swagger Json资源的url地址。
    2、服务启动后:访问 http://host(主机):port(端口)/getWord,etc:http://localhost:8080/getWord 
    3、将生成的getWord文件,增加后缀名 getWord.doc 。

    GitHub 地址

    https://github.com/JMCuixy/swagger2word

    1. SpringBoot 整合篇

    2. 手写一套迷你版HTTP服务器

    3. 记住:永远不要在MySQL中使用UTF-8

    4. Springboot启动原理解析

    看完本文有收获?请转发分享给更多人


    640?

    展开全文
  • 上传word文档的内容

    2019-05-03 13:52:35
    上传word文档的内容 开发工具与关键技术:Visual Studio 2015 作者:李仁海 撰写时间:2019.5.3 一、 上传试题控制器部分代码。 1、试题上传首先public,ActionResult从程序集那引用,然后upLoadWord拿到视图的...
  • 在RCP程序中嵌入Word文档

    千次阅读 2013-06-24 08:27:20
    eclipse提供了一系列的OLE对象操作,但是对Word文档编辑支持并不是很好,所以,在网上搜了一些关于这方面的文章,总算是完成了这个功能。 要用JAVA实现Word文档的读写,目前有几种解决方案,我用的是jacob1.12,能...
  • VB控制Word文档实例精选二

    千次阅读 2013-05-13 11:43:10
    1、返回Word文档的段落文字,控制分页,设置页眉和页脚 '先引用Microsoft Word 11.0 Object Library Option Explicit Dim WordApp As Word.Application '创建Word应用程序 Private Sub Command1_Click() ...
  • FreeMarker通过xml结构生成Word文档,在移动端打开却显示的是xml文档,PC打开正常,而PC上使用Office或者Wps打开这个文档,另存为一个新的Word文档,在移动端打开就正常了。顺着这个思路,找到一个解决方案,使用...
  • 我们要在DOM元素中准备一个容器用于放置Word文档上传的表单,以为我们需要借助form表单的submit属性进行提交,将数据提交到控制器中。其写法如下图。 首先要在外层放置一个div,设置属性display:1none来进行隐藏,...
  • 5-用java生成word文档

    千次阅读 2007-07-27 16:47:00
    用java生成word文档 java 作者 javasky @ 2006-06-10 14:22:04 这几日, 公司有个项目, 要用java生成word文档, 在网上找来找去也没有找到好的生成word文档的库, 找到apache的POI可以使用, 但是所有的release版中也...
  • 用 Python 操作 Word 文档

    千次阅读 2019-07-23 08:30:00
    图片来源于网络♚作者:贠云龙Blog:zhihu.com/people/yunlongyun本文主要讲解python中操作word的思路。一、Hello,world!使...
  • C#中如何上传Word文档

    千次阅读 2019-05-17 08:08:07
    C#中如何上传Word文档 开发工具与关键技术:Visual Studio 2015 作者:姚世添 撰写时间:2019年5月18日 一、 在我们学习ASP.Net.MVC开发的时候,我们可能会运用一些模板来导入开发项目中,例如一些文件,试题,运用...
  • 修改word文档中已有的批注者名称

    千次阅读 热门讨论 2019-04-21 11:49:42
    word中可以通过修改用户的信息实现新建的批注者显示不同的名称,但是对于文档中已有的批注则无法进行修改,在vba中通过word.documents(1).comments(1).contact 属性允许读取批注者名称,但是不允许修改。因此,我们...
  • .net core 导出word文档

    千次阅读 2017-09-01 19:06:00
    Npoi导出word(Peanuts) 标签:C#npoi导出word合并列列样式 2015-10-05 22:162896人阅读评论(0)收藏举报 分类: C#(13) 版权声明:本文为博主原创文章,未经博主允许不得转载。 一个项目...
  • WORD文档转换成PDF格式

    千次阅读 2008-11-11 14:11:00
    由于一个客户的项目中需要将WORD文档转换成PDF格式,实战教程如下: 需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际测试,如果该篇WORD文档有100多页的话,转换需要20分钟左右的时间...
  • 近几年PDF文档越来越普遍化,原因就是word文档保存的文件有可能会因为电脑的差异而打不开,或者在显示上会有差异,给使用者造成不必要的麻烦。PDF能保存写作者想要的效果,将word文档储存为PDF是一个不错的选择。...
  • 使用Word的主控文档,是制作长文档最合适的方法。主控文档包含几个独立的子文档,可以用主控文档控制整篇文章或整本书,而把书的各个章节作为主控文档的子文档
  • 关于对话框 在关于对话框内显示作者的姓名,学号,班级。 B 提交的内容 提交 1.源程序。2.文档。(程序和文档都采用电子文件方式提交) 文档应当具有以下内容: 1. 对于程序的设计和开发,你是怎么考虑的。 2. ...
  • 可以结合使用 Microsoft Office Outlook 2007 和 Microsoft Office Word 2007 有效地发送 Word 文档供他人审阅。每个收件人均可以使用 Office Word 2007 中的修订功能添加批注。您在收到返回的文档后,可以...
  • 损坏Word文档的几种修复方法

    千次阅读 2007-01-25 17:37:00
    http://www.pcdog.com/edu/word/2006/11/v173886.html 损坏Word文档的几种修复方法 来源: 作者:微电脑世界 2006-11-22 出
  • word多个文档替换内容

    万次阅读 热门讨论 2018-09-05 14:51:57
    替换文件夹下所有文档的内容,需要替换的文档不能打开,采用宏进行批量替换,亲测成功,测试是word2016 根据简书作者改编https://www.jianshu.com/p/9d348b8015b6?utm_campaign=maleskine&amp;utm_content=note...
  • IOS 预览word文档的集中方式

    千次阅读 2013-09-02 15:50:09
    在iPhone中可以很方便的预览文档文件,如:pdf、word等等,这篇文章将以PDF为例。介绍三种预览PDF的方式,又分别从本地pdf文档和网络上的pdf文档进行对比。 预览本地PDF文档: 1、使用UIWebView控件 UIWebView是...
  • 用java生成word文档

    千次阅读 2008-02-25 10:16:00
    read word: 代码 public   class  WordExtractor {   public  WordExtractor() {  }     public  String extractText(InputStream in)  throws ...
  • 使用Docx4j创建word文档

    千次阅读 2015-03-02 16:34:03
    原文标题:Creating Word documents with Docx4j ...原文作者:lvdpal 发表时间:2012年9月6日 注:第一次翻译博客;由于个人水平不高,而且英语仅有四级水平,所以错误很多,请大家见谅!!!只是国内关于do
  • 正常来说,WORD文档结构图里的文字是没有底纹填充背景色的;但我总能看到一些例外,今天就又收到一份这样的文档,文档结构图上用了高亮的背景色,看上去很扎眼,很是影响阅读心情。 于是我自然想到要改掉它。我也...
  • 用java生成word文档(转载)

    千次阅读 2007-06-08 13:35:00
    用java生成word文档 poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这里提供了更加简单的一个接口给你:下载经过封装后的poi包: 这个包就是:tm-extractors-0.4.j

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,325
精华内容 10,930
关键字:

word文档显示作者