精华内容
下载资源
问答
  • 昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十文档统一格式,改的很简单就是文件太,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。...

    昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十多篇文档统一改格式,改的很简单就是文件太多,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。说干就干。后面会把程序贴出来,并记录下遇到的问题。

    首先是导入模块:

    import win32com
    from win32com.client import Dispatch
    import glob

    然后开启一个进程:

    w = win32com.client.Dispatch('kwps.Application') # 可能会报错
    w.Visible = 0
    w.DisplayAlerts = 0

    刚开始我使用的是“Word.Application”,结果报错pywintypes.com_error: (-2147221005, '无效的类字符串', None, None),查了一些资料,说是改成“wps.Application”或者“kwps.Application”,改了之后果然成功了。仔细想来,原理应该是开一个文档处理程序(office或wps)的线程进行处理,因为我电脑没有装office,所以失败了。wps和kwps的区别是你电脑上转wps的版本。

    接下来就是处理的程序:

    def process():
        filenames = glob.glob(root + '\*.doc')
        for filename in filenames:
            print(filename)
            doc = w.Documents.Open(FileName=filename)
            # # 文档最开始插入文字,这里是插入文档的名字
            # insert = filename.split('.')[0] + '\n'
            # myRange = doc.Range(0, 0)
            # myRange.InsertBefore(insert)
    
            par = doc.Range(10, doc.Content.End)
            par.ParagraphFormat.LineSpacing = 12
    
            w.ActiveDocument.Select()
            w.Selection.Font.Name = "微软雅黑"
            w.Selection.Font.Size = "12"
            # 删除空行,这里数量是1,因为回车占一个字符
            for each in w.ActiveDocument.Paragraphs:
                if each.Range.Words.Count == 1:
                    each.Range.Delete()
            print("已处理:" + filename)
            # 保存为PDF
            pdf_name = filename.split('.')[0]
            doc.SaveAs(pdf_name, FileFormat=17)
            doc.Close()
        print("处理完毕!")

    运行完成之后,在目录里生成对应的PDF文件了,每个文件名都跟之前的相对应。

    完整代码如下:

    import win32com
    from win32com.client import Dispatch
    import glob
    
    w = win32com.client.Dispatch('kwps.Application')
    w.Visible = 0
    w.DisplayAlerts = 0
    
    def process():
        filenames = glob.glob(root + '\*.doc')
        for filename in filenames:
            print(filename)
            doc = w.Documents.Open(FileName=filename)
            # # 文档最开始插入文字,这里是插入文档的名字
            # insert = filename.split('.')[0] + '\n'
            # myRange = doc.Range(0, 0)
            # myRange.InsertBefore(insert)
    
            par = doc.Range(10, doc.Content.End)
            par.ParagraphFormat.LineSpacing = 12
    
            w.ActiveDocument.Select()
            w.Selection.Font.Name = "微软雅黑"
            w.Selection.Font.Size = "12"
            # 删除空行,这里数量是1,因为回车占一个字符
            for each in w.ActiveDocument.Paragraphs:
                if each.Range.Words.Count == 1:
                    each.Range.Delete()
            print("已处理:" + filename)
            # 保存为PDF
            pdf_name = filename.split('.')[0]
            doc.SaveAs(pdf_name, FileFormat=17)
            doc.Close()
        print("处理完毕!")
    
    
    if __name__ =='__main__':
        root = r'F:\github\Modify_word_using_python\word'
        process()
    
    
    

    后续:我用了半个小时就搞定了我女朋友一天的工作量,她高兴疯了。我告诉她,知识就是力量!

    展开全文
  • 如何合并个PDF文件?...似乎没有什么更好的办法,其实我们只要将统一类型的PDF文档合并成一个文档,这样只需要管理一个文件而不至于文件丢失,问题就轻松解决了。 是的, 但是您知道如何合并这些分散的PDF文件...

    7d7fd6fe4f48ba2bcc101e82643c6224.png

    如何合并多个PDF文件? 除word,PPT,Excel等文件格式外,PDF文件也越来越成为我们日常工作中的主流常用文件格式。我们处理工作文档是可能经常遇到许多分分散的PDF文件,那么我们如何更有效的管理他们呢?似乎没有什么更好的办法,其实我们只要将统一类型的PDF文档合并成一个文档,这样只需要管理一个文件而不至于文件丢失,问题就轻松解决了。 是的, 但是您知道如何合并这些分散的PDF文件吗? 这似乎有点困难。实际上,在学习了PDF合并方法之后,操作起来也是挺简单的,大家具体都是怎样完成呢,今天小编为大家详细介绍多个pdf怎么合并成一个pdf,我们需要用到一款工具软件:

    16c7f4c0f4d8035f028d815e5d5bf95b.png

    使用软件:迅米PDF转换器

    实用系统:Win7/Win10

    下载地址https://www.xmisoft.com/pdf.html

    迅米PDF转换器是一款强大的PDF文档操作工具,不仅可以进行PDF文件的合并,还可以PDF分割、PDF压缩、PDF密码解压等。并且在PDF转word、PPT、txt、excel、图片等方面较好的表现,转化效率高。

    多个pdf合并成一个pdf操作步骤:

    步骤1、安装打开迅米PDF转换器,左侧为此软件的功能列表区域,选择“PDF的其他操作”,点击“PDF合并”。点击右侧红框“点击添加文件”,添加需要合并的PDF文件。

    3ed52be85c4856d1ec5e18a45ca251a9.png

    步骤2、添加完文件后,在软件右上角位置设置文件存储位置,也可以不设置使用默认位置。然后点击右下角的“开始转换”按钮,软件则开始执行合并PDF文件。

    981b6e6ab790eda50716d6c044b3d886.png

    步骤3、当转换进度条状态变成100%时说明多个PDF文件已经成功合并成立一个,点击右侧的打开按钮即可打开合并好的PDF文件,点击右侧的“输出按钮”即可打开合并后pdf文件所在的文件夹位置。

    26d5602daa673d18a68e60556bfdbe7f.png

    以上就是多个pdf怎么合并成一个pdf的解决办法,是不是很方便简单。工欲善其事,必先利其器,一个好的工具会让您的效率提升几倍。

    展开全文
  • 样式(style)是 Word 中用于快速更改文本格式的功能。...例如,需要将别人传过来的份 Word 文档进行整合、统一格式时,他人文档中预设的样式可能会给排版造成混乱和不便。但是,如果一刀切地将其粘贴为纯

    样式(style)是 Word 中用于快速更改文本格式的功能。将一种样式应用于文档中不同段落之后,只需更改一次该样式,即可同时更改这些文本的格式。同时,样式还能使文档结构化,指定不同「标题」层次的样式后,即可快速生成目录。

    但样式有时也会带来麻烦。例如,需要将别人传过来的多份 Word 文档进行整合、统一其格式时,他人文档中预设的样式可能会给排版造成混乱和不便。但是,如果一刀切地将其粘贴为纯文本,不仅会丢失所有的格式,增加不必要的工作量,又会导致文本层级难以辨识。其实,利用 Office 中的 VBA 脚本,就能在移除样式的同时保留文本格式。

    下图中,左侧是使用粘贴为纯文本方法所得结果,右侧则是用 VBA 可以实现的效果,可以看出,原本的标题样式已经被移除,但仍然保留了全部的格式设定:

    效果比较

    具体的实现方法如下:

    A. 如果你使用 macOS 和 Office 2016 for Mac

    1. 正常使用样式功能来编排文档;

    2. 依次点击菜单中的「工具」–「宏」–「Visual Basic 编辑器…」;

    3. 在弹出的窗口右侧粘贴如下脚本:

       Sub DirectFormat()
           Dim para As Paragraph
           Dim fnt As Font
           Dim pfmt As ParagraphFormat
           For Each para In ActiveDocument.Paragraphs
               With para
                   If .Style <> ActiveDocument.Styles("Normal") Then
                   Set fnt = .Style.Font
                   Set pfmt = .Style.ParagraphFormat
                   .Style = ActiveDocument.Styles("Normal")
                   .Range.Font = fnt
                   .Range.ParagraphFormat = pfmt
                   End If
               End With
           Next
       End Sub
      
    4. 点击下方的「运行程序」按钮,执行上述命令;

    5. 所有的样式现在已经被清除。

      要检查是否运行成功,在「主页」选项卡中点击打开「样式面板」,然后试着在之前设置有样式的段落中单击。如果右侧的样式面板中始终显示为「Normal」样式,则表明已经运行成功。

    B. 如果你使用 Windows 和 Office 2016

    1. 正常使用样式功能来编排文档;

    2. 按下 Alt + F11 组合键;

    3. 在弹出的窗口中,双击左侧的「ThisDocument」选项,并在右侧弹出的空白窗口中粘贴如下脚本:

       Sub DirectFormat()
           Dim para As Paragraph
           Dim fnt As Font
           Dim pfmt As ParagraphFormat
           For Each para In ActiveDocument.Paragraphs
               With para
                   If .Style <> ActiveDocument.Styles("Normal") Then            
                   Set fnt = .Style.Font
                   Set pfmt = .Style.ParagraphFormat
                   .Style = ActiveDocument.Styles("Normal")
                   .Range.Font = fnt
                   .Range.ParagraphFormat = pfmt
                   End If
               End With
           Next
       End Sub
      
    4. 点击上方工具栏中的「运行」按钮,执行上述命令;

    5. 所有的样式现在已经被清除。

      要检查是否运行成功,在「主页」选项卡中,点击「样式」区域右下角的展开按钮,展开样式窗格,然后试着在之前设置有样式的段落中单击。如果右侧的样式窗格中始终显示为「Normal」样式,则表明已经运行成功。

    备注

    需要注意的是,如果你同时打开了多份 Word 文档,那么在上述 VBA 编辑器的左侧,也会出现多个文档的选项。这种场合,请保证选中了 Project(需要去除样式的文档)-Microsoft Word Objects-ThisDocument 并使其高亮,然后再在右侧粘贴并执行代码。

    请输入图片标题

    Facts for Nerds

    上述命令的作用如下:遍历文档中所有段落并检查其样式,如果某一段落的样式不是「Normal(正文)」,则记住其当前格式设置,然后清除该段落的样式,最后将先前记住的格式重新应用到该段落上。

    展开全文
  • 因为我看过网上很讲解的都不够全面,而本文结合实际工作讲解了swaggerui文档统一响应格式,异常处理,权限验证等常用模块,并提供一套完善的案例源代码,在实际工作中可直接参考使用。 一、先看看最终效果 这...

    为什么还要写这类文章?因为我看过网上很多讲解的都不够全面,而本文结合实际工作讲解了swaggerui文档,统一响应格式,异常处理,权限验证等常用模块,并提供一套完善的案例源代码,在实际工作中可直接参考使用。

    一、先看看最终效果

    这是最后生成的swagerui文档,大家可以直接访问这个地址体验:

    http://sapi.daimali.com/swagger/ui/index

    (若无法访问,请公众号CodeL联系)

    git源码地址:https://gitee.com/daimali/WebApiDemo (推荐直接看源码)

     

     文档效果图:

    响应的内容:

    注意看红色部分,所有的响应内容都将自动封装成如下格式:由code,msg,data三部分组成

    {
      "code": 200,
      "msg": "OK",
      "data": {
        "List": [
          {
            "OrderId": 1001,
            "UserName": "绿巨人",
            "OrderDate": "2018-11-18T09:39:36.0404502+08:00"
          },
          {
            "OrderId": 1002,
            "UserName": "钢铁侠",
            "OrderDate": "2018-11-17T09:39:36.0404502+08:00"
          }
        ],
        "total": 20
      }
    }

     

    实现以上API的整体思路是:

    1. 使用SwaggerUI自动生成接口文档、便于团队协作,减少工作量

    2. 通过ActionFilter实现权限控制与响应格式的统一封装

    3. 通过ExceptionFilter实现异常的统一处理

     

    我觉得大部分人阅读到这里就可以了,剩下的时间去看看源码,需要用的时候边用边学就好了

     

    二、接口文档 - SwaggerUI注意点

    1. swagger汉化,注意swagger_lang.js 属性生成操作需要选择"嵌入的资源"

    2. 项目右键-属性-生成:输出项勾选XML文档文件

     

    三、统一响应格式说明

    通过 ApiResultFilterAttribute 类实现响应参数的统一封装:ApiResultFilterAttribute继承自ActionFilterAttribute

    这里封装的响应格式由如下三部分组成: code:跟随HttpCode,msg:返回的描述信息, data:接口返回的业务数据统一放在data中

    {  
    
         "code": 200, 
    
         "msg": "OK", 
    
         "data": null
    
    }
        /// <summary>
        /// 响应数据
        /// </summary>
        /// <typeparam name="T">自定义响应的内容</typeparam>
        public class ResponseApi<T>
        {
            /// <summary>
            /// 错误代码
            /// </summary>
            public int code { get; set; }
            /// <summary>
            /// 错误信息
            /// </summary>
            public string msg { get; set; }
            /// <summary>
            /// 响应数据
            /// </summary>
            public T data { get; set; }
    
        }

    通过actionfilter统一封装:

    public class ApiResultFilterAttribute : ActionFilterAttribute
        {
            /// <summary>
            /// 进入action之前做权限验证
            /// </summary>
            public override void OnActionExecuting(HttpActionContext actionContext)
            {
                var token = true;
                //权限验证省略
                if (token)
                {
                    ResponseApi<object> result = new ResponseApi<object>();
                    // 取得由 API 返回的状态代码
                    result.code = (int)HttpStatusCode.Unauthorized;
                    // 取得由 API 返回的资料
                    result.data = null;
                    result.msg = "invalid ticket value";
    
                    HttpResponseMessage response = new HttpResponseMessage
                    {
                        Content = new StringContent(JsonConvert.SerializeObject(result),
                           Encoding.GetEncoding("UTF-8"), "application/json")
                    };
                    //结果转为自定义消息格式
                    HttpResponseMessage httpResponseMessage = response;
    
                    // 重新封装回传格式
                    actionContext.Response = httpResponseMessage;
                }
            }
            /// <summary>
            /// 统一响应格式
            /// </summary>
            public override void OnActionExecuted(HttpActionExecutedContext filterContext)
            {
                base.OnActionExecuted(filterContext);
    
                if (filterContext.ActionContext.Response != null)
                {
                    ResponseApi<object> result = new ResponseApi<object>();
                    // 取得由 API 返回的状态代码
                    result.code = (int)filterContext.ActionContext.Response.StatusCode;
                    // 取得由 API 返回的资料
                    result.data = filterContext.ActionContext.Response.Content.ReadAsAsync<object>().Result;
                    HttpResponseMessage response = new HttpResponseMessage
                    {
                        Content = new StringContent(JsonConvert.SerializeObject(result),
                           Encoding.GetEncoding("UTF-8"), "application/json")
                    };
                    //结果转为自定义消息格式
                    HttpResponseMessage httpResponseMessage = response;
    
                    // 重新封装回传格式
                    filterContext.Response = httpResponseMessage;
    
                }
            }
        }
    ApiResultFilterAttribute.cs

     

     

    四、自定义异常信息

    针对于所有的异常信息,接口也会返回对应的code,msg,data的格式:

    通过CustomException和CustomExceptionFilterAttribute实现:

    public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
        {
            /// <summary>
            /// 统一对调用异常信息进行处理,返回自定义的异常信息
            /// </summary>
            /// <param name="context">HTTP上下文对象</param>
            public override void OnException(HttpActionExecutedContext context)
            {
                //自定义异常的处理
                if (context.Exception is CustomException)
                {
                    var exception = (CustomException)context.Exception;
                    ResponseApi<object> result = new ResponseApi<object>()
                    {
                        code = exception.GetErrorCode(),
                        msg = exception.Message
                    };
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        //封装处理异常信息,返回指定JSON对象
                        Content = new StringContent(JsonConvert.SerializeObject(result),
                        Encoding.GetEncoding("UTF-8"), "application/json"),
                        ReasonPhrase = "InternalServerErrorException",
                    });
                }
                else
                {
                    ResponseApi<object> result = new ResponseApi<object>()
                    {
                        code = -1,
                        msg = context.Exception.Message
                    };
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        //封装处理异常信息,返回指定JSON对象
                        Content = new StringContent(JsonConvert.SerializeObject(result)),
                        ReasonPhrase = "InternalServerErrorException"
                    });
                }
            }
        }
    CustomExceptionFilterAttribute.cs

     

     

    看源码

    需要说的东西太多,直接看源码更方便:

    接口预览地址:http://sapi.daimali.com/swagger/ui/index

    (若无法访问,请公众号联系)

    git源码地址:https://gitee.com/daimali/WebApiDemo

     

    继续看详细步骤:

    1. 新建空ASP.NET MVC空应用程序,选择WebApi

    2. Nuget引用Swashbuckle.Core  (demo目前用的v5.6.0最新稳定版)

    3. 将App_Start中的类复制到你的新项目中,然后更改命名空间为你自己项目

    4. 按需调整SwaggerConfig.cs 配置

    5. 将Scripts文件复制到你的项目中,同时设置 swagger_lang.js 文件 属性- 生成操作为"嵌入的资源",按需调整 swagger_lang.js文件内容

    6. 注意你的WebApiConfig中需要添加 ApiResultFilterAttributeCustomExceptionFilterAttribute

    7. 项目右键-属性-生成:输出项勾选XML文档文件 

    此时,你新建的webapi控制器已经支持swagger,并且会统一封装成code,msg,data的格式了

     

    修正:

    1. HttpGet 请求接收参数时需要加 [FromUri]

    2. token验证不应该放在OnActionExecuted中,应该在接口执行之前,比如:AuthorizeAttribute中,或者 ActionFilterAttribute里面的OnActionExecuting方法(源码已调整为OnActionExecuting )

     

     

    评论区已知问题(待解决,后续将持续更新Demo,感兴趣的同学多多关注):

    1. 解决swagger 文件上传问题   

     

     

    相关资源获取或其他疑问可在公众号CodeL留言。

     

    转载于:https://www.cnblogs.com/codelir/p/9977667.html

    展开全文
  • 论文指导老师统一Word论文格式方法 每学期末,学校都会向各科教师收集论文归档,尽管事先布置了论文的排版格式,但交上来的很论文依然格式统一,归纳起来主要存在以下几个方面的问题: 1. 纸张大小和页边距不...
  • Typora-编写博客格式文档的最佳软件Typora ...作为技术人员或者专业人员,使用Markdown语法进行写作,可以提高文档的编写能力,而且格式也比较统一,支持编辑Markdown的软件也比较,任何电脑都很容易查看或者编...
  • 现在了很项目,都是前后端分离的项目,所以了前后端都会约定传输的数据格式,以及响应提醒。 响应json格式 现在应该都是使用的json交互了,应该没有使用xml的吧? 一般了响应json格式是由以下三个字段组成。 { ...
  • 便于用户实现对多种文档统一管理,编辑,检索和浏览。用户可以使用本产品,实现文档在线预览,十分便利的将附件中的Word,Excel,PPT文档转换为HTML,通过浏览器浏览HTML的内容。 本产品采用了先进的语言、...
  • Typora-编写博客格式文档的最佳软件Typora ...作为技术人员或者专业人员,使用Markdown语法进行写作,可以提高文档的编写能力,而且格式也比较统一,支持编辑Markdown的软件也比较,任何电脑都很容易查看或者编...
  • Word 由于一般人都只用来打打字,所以用到VBA的场景不。但是对于写手、科研工作者,经常要用Word写文章,遇到一个长篇文章,需要批量调整格式内容时,VBA就有用武之地了。比如最近拿到了一个91页Word,里面有不少...
  • Word合并文档统一格式,你做过吗,什么感受?前些天,有一位网友问我word多级列表的问题,编号不连续。打开发来的文档一看,这不仅仅是多级列表的小问题,而是合并文档统一格式的大问题。原来这个文档是各个部门发来...
  • 在文档编辑的过程中,很时候要把文档统一合并为一个文档,而在InDesign中进行文档合并,对合并的文档结构是有一定的格式要求的,不然合并的文档在结构上会产生一定的混乱,下面说下个文档合并为一个文档的...
  • 统一的差异查看器 4.30.6. 已保存数据的设置 4.30.7. 日志缓存 4.30.7.1. Cached Repositories 4.30.7.2. 日志缓存统计 4.30.8. 客户端钩子脚本 4.30.8.1. 问题跟踪器集成 4.30.9. TortoiseBlame 的设置 4.30.10. ...
  • Word合并文档统一格式,你做过吗,什么感受?前些天,有一位网友问我word多级列表的问题,编号不连续。打开发来的文档一看,这不仅仅是多级列表的小问题,而是合并文档统一格式的大问题。原来这个文档是各个部门发来...
  • 便于用户实现对多种文档统一管理,编辑,检索和浏览,能够完美的实现文档附件在线预览功能。本产品采用了先进的语言、平台、线程的设计理念,支持多国语言,多种操作系统,提供了多种形式的API功能接口,...
  • 什么是markdownmarkdown是一种文本编辑语法,写出来的文档简洁大方、格式统一,语法简单易学,后缀以.md结尾,而且现在几乎很平台都支持。为什么要用markdown来写文档,word的强大之处毋庸置疑,但是有时候对于...
  • 当我们写论文的时候,会对长文档进行排版,有时候需要插入图片,例如,图片的环绕格式,图片大小等,文档中有很图片,因此一一修改它们确实很麻烦,那么,有什么方法可以一键修改图片的环绕格式和大小呢?...
  • 首先对一位数的参考文献的标号进行设置,点开查找,点开更(高级),输入[^#],点 在以下项中查找,主文档,找到后直接默认的选中有自中括号的文献标记,你直接设置上标即可。 3.然后再对两位数的文献进行设置。...
  • 6.利用VBA对象,导出DataView到一个Excel文档中的Excel辅助类(Export2Excel.cs) 7.关联文件(ExtensionAttachUtil.cs) 8.注册文件关联的辅助类(FileAssociationsHelper.cs) 9.打开、保存文件对话框操作辅助类...
  • 由于有很个Word文件,所以应用宏会更加方便排版,而且版式较为统一。 Sub 设置列宽() ' ' 设置列宽宏 ' ' ActiveDocument.Tables(1).Cell(7, 2).Width = 45 '将Word表格的第7行第2列(即B7单元格)的...
  • 利用gitbook+git+jenkins+nodejs搭建起一套版本说明的文档网站 ... 现有这么一场景,产品产出了大量的文档,这些文档要对外展示,且产品每个版本的文档内容...文档编写采用统一标准,都用Markdown格式的,最后可以用...
  • JAVA_API1.6文档(中文)

    万次下载 热门讨论 2010-04-12 13:31:34
    java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序...
  • VIM快速文档整理技巧

    2018-11-24 21:06:33
    VIM整理文档具有非常好的效果,我最近由于开发的需要...1.获取文件特别是中文档会有很编码问题而显示不对,统一使用utf8编友。查看文档编码并设置文件上应编码utf8 获取编码 set fileencoding 设置编码及语言 set...
  • 在很应用系统中,尤其是电子商务类应用系统,往往都会看到应用提供报表、不同数据格式的文件供用户下载,自然提供下载的文件有多种多样:EXCEL、CSV、TXT、PDF、WORD,甚至有更复杂的数据结构文档;本文主要介绍...
  • 这是微信支付-统一下单 接口文档 一、问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二、排错过程 1、次对比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 547
精华内容 218
关键字:

多文档统一格式