Redraw = false//禁止重绘(类似于VBA中的: Application.screenupdating=FALSE),以提高运行效率
 //去除所有空行和只由空白字符构成的行
 document.selection.replace("^\\s*?\\n|\\r\\n$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
 //下面是Plan A
 function planA(n){
     //去除所有不是由数字或\t开头的非空行
     document.selection.replace("\\r\\n^[^\\d\\t].*?$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
     //以下是核心代码,我把它们写进了一个块中,会根据实际情况自动生成具体的解决方案
     {
         var find = "^([^\\t\\r]+)",replace = "$1",str = ""//初始化一些变量
         //如下是1个迭代的过程并包括下面的拼接,我把它们写进了一个块中,是核心代码中的关键代码
         {
             for(var i=1;i<=n;i++){
             str = str+"\\t([^\\t\\r]*)"
             replace = replace+"\\t$"+(i+1)+"$"+(n+i+1)
             }
             find = find+str+"\\r\\n"+str+"$"
         }
         document.selection.Replace(find, replace, eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
     }
 }
 //下面是Plan B
 function planB(n){
     //去除所有不是由数字或\t开头的非空行
     document.selection.replace("\\r\\n^[^\\d\\t].*?$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
     lines = document.getLines()//获取此时文档中的行数
     if(lines-1){//如果行数>1,则进行进一步处理
         document.selection.startOfDocument()//光标移动到文档开头
         document.selection.lineDown(0,1)//光标向下移动1行
         //如下是1个迭代的过程,是核心代码
         for(var lineNo=2;lineNo<=lines;){
             document.selection.charRight(1,1)//光标向右移动1个字符并选中之间的部分
             if(document.selection.text=="\t"){//如果选中的是\t,则进行进一步处理
                 //获取相邻的2行中的文本,分别传递给2个变量
                 var str1=document.getLine(lineNo-1)+"\t\t"
                 var str2=document.getLine(lineNo)+"\t\t"
                 //创建2个正则表达式对象
                 var reg1 = editor.regex
                 var reg2 = editor.regex
                 //定义这2个正则表达式
                 reg1.Global = true
                 reg1.Pattern = "([^\t]*)\t"
                 reg2.Global = true
                 reg2.Pattern = "([^\t]*)\t"
                 //声明并初始化strr1和strr2
                 var strr1 = reg1.Find(str1).Item(1).Value,strr2 = reg2.Find(str2).Item(1).Value
                 var str = ""//初始化str
                 ///如下是1个迭代的过程,是核心代码中的关键代码
                 for(var i = 0;i<=n;i++){
                     if(i>0){
                         str+="\t"
                     }
                     str=str+strr1+strr2
                     strr1 = reg1.Find(str1).Item(1).Value
                     strr2 = reg2.Find(str2).Item(1).Value
                 }
                 document.selection.endOfLine()//光标移动到当前行尾
                 document.selection.startOfLine(1)//光标移动到当前行首,并选中之间部分
                 document.selection.lineUp(1,1)//光标向上移动1行,并选中之间部分
                 document.write(str)//把str写入文档以替换当前选中部分
                 document.selection.charRight(0,1)//光标向右移动1个字符
                 lines--//因为以上处理会使文档减少1行,所以lines=lines-1
             }else{
                 document.selection.charLeft(0,1)//光标向左移动1个字符
                 document.selection.lineDown(0,1)//向下移动光标一定的行数
                 lineNo++
             }
         }
     }
 }
 //使用try{}catch(err){},如果捕获错误,则弹出对话框并终止宏
 try{//尝试获取第2行,如果没有第2行,就会抛出错误
     document.GetLine(2)
 }
 catch(err){//发生错误时将其捕获,并进行进一步处理
     alert("其实你并没有必要再做多余的处理")
     quit()//终止执行宏
 }
 var n = document.getLine(2).match(/\t/g)//分析str中\t的情况
 if(n){//如果n!=null,则进行进一步处理
     n = n.length//获取当前第2行的\t数目并赋值给n
     if(n<5){
         planA(n)
     }else{
         answer = confirm(//在特殊情况下,弹出对话框让用户自行决定是否选择替换方案
         "目前貌似有"+(n+1)+"列,但是如果表格的列数>=6,\
         Plan A就不能正确处理,因为EmEditor的正则表达式\
         引擎最多只支持9个分组和10组反向引用,"+(n+1)+"列\
         就需要"+(2*n+1)+"个分组。不过我有一个PlanB,或许\
         能得到正确的处理结果,请问是否要选用Plan B?")
         if(answer ){//如果用户选择了是,则进行进一步处理
             planB(n)
         }else{//否则终止执行宏
             quit()
         }
     }
 }else{//如果n==null
     alert("我认为这个宏不足以解决问题")
 }
 Redraw = true//允许重绘

序号为首列的表格排版(实现1-基于EmEditor的正则表达式引擎)

 Redraw = false//禁止重绘(类似于VBA中的: Application.screenupdating=FALSE),以提高运行效率
 //去除所有空行和只由空白字符构成的行
 document.selection.replace("^\\s*?\\n|\\r\\n$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
 lines = document.getLines()//获取此时文档中的行数
 if(lines==1){//如果只有1行,则不需要进行处理
     alert("其实你并没有必要再做多余的处理")
 }else{//如果行数>1,则进行进一步处理
     //由于第1行可能是某些描述性文字,所以分析第2行,并进行一些判断和选择
     if(document.getLine(2).indexOf("\t")>-1){//如果存在\t
         //去除所有不是由数字或\t开头的非空行
         document.selection.replace("\\r\\n^[^\\d\\t].*?$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
         lines = document.getLines()//获取此时文档中的行数
         if(lines-1){//如果行数>1,则进行进一步处理
             document.selection.startOfDocument()//光标移动到文档开头
             document.selection.lineDown(0,1)//光标向下移动1行
             //如下是1个迭代的过程,是核心代码
             for(var lineNo=2;lineNo<=lines;){
                 document.selection.charRight(1,1)//光标向右移动1个字符并选中之间的部分
                 if(document.selection.text=="\t"){//如果选中的是\t,则进行进一步处理
                     //获取相邻的2行中的文本,并用\t进行分组,把得到的2个数组分别传递给2个变量
                     str1=document.getLine(lineNo-1).split("\t")
                     str2=document.getLine(lineNo).split("\t")
                     document.selection.selectLine()//选中光标所在行
                     document.selection.Delete()//删除选中的这一行,所有下面的行(如果有的话)上移1行
                     document.selection.lineUp(0,1)//光标向上移动1行
                     document.selection.selectLine()//选中光标所在行
                     document.selection.Delete()//删除选中的这一行,所有下面的行(如果有的话)上移1行
                     document.selection.lineOpen(true)//在光标所在行和上一行之间插入1个空白行,并把光标移过去
                     ///如下是1个迭代的过程,是核心代码中的关键代码
                     for(var i=0,n=str1.length;i<n;i++){
                         if(i){
                             document.write("\t")
                         }
                         document.write(str1[i]+str2[i])
                     }
                     document.selection.charRight(0,1)//光标向右移动1个字符
                     lines--//因为以上处理会使文档减少1行,所以lines=lines-1
                 }else{
                     document.selection.charLeft(0,1)//光标向左移动1个字符
                     document.selection.lineDown(0,1)//向下移动光标一定的行数
                     lineNo++
                 }
             }
         }
     }else{//tabs==null时的提示信息
         alert("我认为这个宏不足以解决问题")
     }
 }
 Redraw = true//允许重绘

序号为首列的表格排版(实现2-基于JavaScript的split()方法)

 Redraw = false//禁止重绘(类似于VBA中的: Application.screenupdating=FALSE),以提高运行效率
 //去除所有空行和只由空白字符构成的行
 document.selection.replace("^\\s*?\\n|\\r\\n$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
 lines = document.getLines()//获取此时文档中的行数
 if(lines==1){//如果只有1行,则不需要进行处理
     alert("其实你并没有必要再做多余的处理")
 }else{//如果行数>1,则进行进一步处理
     //由于第1行可能是某些描述性文字,所以分析第2行,并进行一些判断和选择
     if(document.getLine(2).indexOf("\t")>-1){//如果存在\t
         //去除所有不是由数字或\t开头的非空行
         document.selection.replace("\\r\\n^[^\\d\\t].*?$", "", eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF )
         lines = document.getLines()//获取此时文档中的行数
         if(lines-1){//如果行数>1,则进行进一步处理
             document.selection.startOfDocument()//光标移动到文档开头
             document.selection.lineDown(0,1)//光标向下移动1行
             //如下是1个迭代的过程,是核心代码
             for(var lineNo=2;lineNo<=lines;){
                 document.selection.charRight(1,1)//光标向右移动1个字符并选中之间的部分
                 if(document.selection.text=="\t"){//如果选中的是\t,则进行进一步处理
                     //获取相邻的2行中的文本,分别传递给2个变量
                     var str1=document.getLine(lineNo-1)
                     var str2=document.getLine(lineNo)
                     //创建2个正则表达式对象
                     var reg1 = /[^\t]*/g, reg2 = /[^\t]*/g
                     //声明并初始化strr1和strr2
                     var strr1 = reg1.exec(str1),strr2 = reg2.exec(str2)
                     var str = ""//初始化str
                     ///如下是1个迭代的过程,是核心代码中的关键代码
                     for(var i = 0;strr1!=null;i++){
                         if(i>0){
                             str+="\t"
                         }
                         str=str+strr1+strr2
                         if(strr1!=""){
                         reg1.exec(str1)
                         }
                         if(strr2!=""){
                         reg2.exec(str2)
                         }
                         strr1 = reg1.exec(str1)
                         strr2 = reg2.exec(str2)
                     }
                     document.selection.endOfLine()//光标移动到当前行尾
                     document.selection.startOfLine(1)//光标移动到当前行首,并选中之间部分
                     document.selection.lineUp(1,1)//光标向上移动1行,并选中之间部分
                     document.write(str)//把str写入文档以替换当前选中部分
                     document.selection.charRight(0,1)//光标向右移动1个字符
                     lines--//因为以上处理会使文档减少1行,所以lines=lines-1
                 }else{
                     document.selection.charLeft(0,1)//光标向左移动1个字符
                     document.selection.lineDown(0,1)//向下移动光标一定的行数
                     lineNo++
                 }
             }
         }
     }else{//如果不存在\t
         alert("我认为这个宏不足以解决问题")
     }
 }
 Redraw = true//允许重绘

序号为首列的表格排版(实现3-基于JavaScript的exec()方法)

用EmEditor实现PDF转Word后的对齐排版的更多相关文章

  1. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

  2. 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件

    PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...

  3. iText导出pdf、word、图片

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  4. PDF转WORD工具 Solid Converter PDF v9.1.6744

    Solid Converter PDF中文破解版(pdf转换成word转换器)是一款功能强大的PDF格式转换软件.Solid Converter PDF允许用户将PDF转换为Word(PDF to W ...

  5. 如何保存PDF、Word和Excel文件到数据库中

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...

  6. 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法

    判断pdf.word文档.图片等文件类型(格式).大小的简便方法 很久没发文了,今天有时间就写一下吧. 关于上传文件,通常我们都需要对其进行判断,限制上传的类型,如果是上传图片,我们甚至会把图片转化成 ...

  7. 某pdf转word v6.3.0.2算法分析

    某pdf转word v6.3.0.2算法分析 [文章标题]某pdf转word v6.3.0.2算法分析 [文章作者]jieliuhouzi[原版下载]www.pdfcword.cn [保护方式]序列号 ...

  8. Java 将PDF 转为Word、图片、SVG、XPS、Html、PDF/A

    本文将介绍通过Java编程来实现PDF文档转换的方法.包括: 1. PDF转为Word 2. PDF转为图片 3. PDF转为Html 4. PDF转为SVG 4.1 将PDF每一页转为单个的SVG ...

  9. C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——基于Spire.Cloud.PDF

    Spire.Cloud.PDF提供了接口PdfConvertApi可用于将PDF文档转换为其他格式文档,如Word(docx/doc).Html.XPS.SVG.PCL.PS.Png以及XPS转成PD ...

随机推荐

  1. [Asp.net 5] Caching-缓存预告

    本节讲Asp.net 5的缓冲.解决方案可以通过网址:https://github.com/aspnet/Caching下载 也是Asp.net 5开源代码介绍的第6部分,前5部分链接如下: 1. D ...

  2. NavisWorks Api 简单使用与Gantt

    相信很多朋友在做BIM项目的时候.都有客户会提出项目计划,形象进度 等需求. 那么当前最主要的问题就是计划与BIM模型的关联问题.那么我在项目中是用户用Project软件编辑计划然后手动跟三维模型关联 ...

  3. asp.net实现图片在线上传并在线裁剪

    1.说明 接上一篇文章uploadify实现多附件上传完成后,又突然用到头像上传并在线裁剪.在网上找个众多例子都没有符合要求的,有一篇文章写的不错,就是文旺老兄写的这篇Asp.Net平台下的图片在线裁 ...

  4. 消耗战 bzoj 2286

    消耗战(2s 512MB)repair [问题描述] 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经 ...

  5. 随机数(random)

    需求 Random rd=new Random(); 需要十以内的随机数  (0---10) System.out.println((int)((rd.nextDouble()*100)/10)); ...

  6. maven之一:maven安装和eclipse集成

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  7. 9.1.2 asp.net core 自动生成组合查询

    在做系统的时候,经常遇到前台录入一大堆的查询条件,然后点击查询提交后台,在Controller里面生成对应的查询SQL或者表达式,数据库执行再将结果返回客户端. 例如如下页面,输入三个条件,日志类型. ...

  8. Linux下安装Oracle11g服务器

    1.安装环境 Linux服务器:CentOS  64位 Oracle服务器:Oracle11gR2 64位 2.系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内 ...

  9. android textview 自动换行 整齐排版

    一.问题在哪里? textview显示长文字时会进行自动折行,如果遇到一些特殊情况,自动折行会杯具成这个样子: 上述特殊情况包括: 1)全角/半角符号混排(一般是数字.字母.汉字混排) 2)全角/半角 ...

  10. 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:

    Asp.net MVC中的ViewData与ViewBag ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP. ...