域代码转换html丢失解决办法_第1页
域代码转换html丢失解决办法_第2页
域代码转换html丢失解决办法_第3页
域代码转换html丢失解决办法_第4页
域代码转换html丢失解决办法_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Word转html存在域代码丧失。Aspose,jacob,poi都无法解决在使用jocob转换成html时域代码会被<!--[ifsupportFields]><!—[endif]-->包裹可以统一提取出来转换成late*,late*转换成图片,解决word域代码丧失问题privatevoidprocessFormula(List<Node>nodes)throwsUnsupportedEncodingE*ception{for(inti=nodes.size()-1;i>=0;i--){ Nodenode=nodes.get(i);if(nodeinstanceofElement){ Elemente=(Element)node; processFormula(e.childNodes()); }elseif(nodeinstanceofment){StringmentTe*t=node.toString();if(mentTe*t.contains("<!--[ifsupportFields]>")){ mentment=(ment)node; Stringlate*=EqFormulaLate*Util.getLate*(ment);if(StringUtils.isNotBlank(late*)){ Stringlate*Temp=newString(Base64.encodeBase64(late*.getBytes()));late*=URLEncoder.encode(late*,"utf-8");late*=late*.replace("+","%20"); Stringurl=LATE*URL+late*;node.after("<imgencode='encode'data-late*='"+late*Temp+"'src='"+url+"'/>"); } } } } }/****/package..tlsys.rawpaper2*.utils;importjava.io.File;importjava.io.IOE*ception;import.URLEncoder;importjava.util.ArrayList;importjava.util.List;importorg.jsoup.Jsoup;importorg.jsoup.nodes.ment;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;importorg.springframework.util.CollectionUtils;import..elp.mon.util.StringUtils;/***authorfeiwang8**2016年8月24日下午3:45:05*/publicclassEqFormulaLate*Util{ /** *左括号替代符号*/ publicstaticfinalStringLEFTBRACKETRE="く"; /** *右括号替代符号*/ publicstaticfinalStringRIGHTBRACKETRE="ぐ"; /** *左括号*/ publicstaticfinalStringLEFTBRACKET="("; /** *右括号*/ publicstaticfinalStringRIGHTBRACKET=")"; /** *双正则*/ publicstaticfinalStringREGE*PART_F="^((\\([\\s\\S]*\\)|[^\\(\\)])+),((\\([\\s\\S]*\\)|[^\\(\\)])+)$"; /** *单正则*/ publicstaticfinalStringREGE*PART="((\\([\\s\\S]*\\)|[^\\(\\)])+)"; /** *逗号替代符号*/ publicstaticfinalStringMARE="ぃ"; /** *逗号*/ publicstaticfinalStringMA=","; /** *更加ment获取late* *parammenthtmlment *returnlate* */ publicstaticStringgetLate*(mentment){ returngetLate*(ment.toString()); } /** *根据ment获取late* *parammenthtmlment *returnlate* */ publicstaticStringgetLate*(Stringment){ Stringhtml=ment .replace("<!--[ifsupportFields]>","") .replace("<![endif]-->","") .replace((char)10+"","") .replace((char)13+"",""); Documentdoc=Jsoup.parse(html); Elementssups=doc.select("sup"); Elementssubs=doc.select("sub"); //纠正上标 for(Elementsup:sups){ Stringte*t=sup.te*t(); sup.tagName("span"); sup.te*t("\\s("+te*t+",)"); } //纠正下标for(Elementsub:subs){ Stringte*t=sub.te*t(); sub.tagName("span"); sub.te*t("\\s(,"+te*t+")"); } Stringeqte*t=doc.body().te*t(); eqte*t=mergeSubSup(eqte*t); //无法被StringUtil判断为空白的空白eqte*t=eqte*t.replace((char)8203+"",""); eqte*t=eqte*t.replace((char)160+"","").replace("\\",""); eqte*t=eqte*t.trim();// System.out.println(eqte*t+"-------------->"); if(eqte*t.startsWith("eq")){ eqte*t=eqte*t.replaceFirst("eq","").trim(); eqte*t=eqte*t.replace("\\"+LEFTBRACKET,"\\"+LEFTBRACKETRE).replace("\\"+RIGHTBRACKET,"\\"+RIGHTBRACKETRE).replace("\\"+MA,"\\"+MARE); Stringlate*=parserElements(eqte*t); returnlate*.replace("\\"+LEFTBRACKETRE,"\\"+LEFTBRACKET).replace("\\"+RIGHTBRACKETRE,"\\"+RIGHTBRACKET).replace("\\"+MARE,"\\"+MA); } return""; } privatestaticStringmergeSubSup(Stringlate*){ //这里需要合并上下标例如:eq\i\su(\s(i,)\s(=,)\s(1,),\s(,3),*) //--->eq\i\su(\s(i=1,),\s(,3),*) //TODO returnlate*; } /** * *parameqte*t *return */ privatestaticStringparserElements(Stringeqte*t){ Stringlate*=""; if(eqte*t.contains("\\")&&eqte*t.contains(LEFTBRACKET)&&eqte*t.contains(RIGHTBRACKET)){ StringpreTe*t=eqte*t.substring(0,eqte*t.inde*Of("\\")); intstartInde*=eqte*t.inde*Of("\\"); intendInde*=getNe*tLeftBra(startInde*,'(',eqte*t); intne*tBra=getNe*tBraInde*(endInde*+1,eqte*t); Stringname=eqte*t.substring(startInde*,endInde*); Stringte*t=eqte*t.substring(endInde*+1,ne*tBra); StringsuffTe*t=eqte*t.substring(ne*tBra+1,eqte*t.length()); late*=parserElements(preTe*t)+parserToLate*(name.trim(),te*t)+parserElements(suffTe*t); }else{ late*=eqte*t; } returnlate*; } privatestaticintgetNe*tLeftBra(intstart,charsym,Stringeqte*t){ for(inti=start;i<eqte*t.length();i++){ charleftbra=eqte*t.charAt(i); if(leftbra==sym){ returni; } } returneqte*t.length(); } /** *获取配对括号的位置*paramte*t文本*return位置*/ privatestaticintgetNe*tBraInde*(intstart,Stringte*t){ intleftbra=0; intrightbra=0; for(inti=start-1;i<te*t.length();i++){ charc=te*t.charAt(i); if(c==')'){ leftbra++;} if(c=='('){ rightbra++; } if(rightbra!=0&&leftbra==rightbra&&i>=start){ returni; } } return0; } privatestaticStringparserToLate*(Stringname,Stringte*t){ Stringlate*=""; name=name.toLowerCase(); //分式if(name.equals("\\f")){ late*+=getFLate*(name,te*t); //根式 }elseif(name.equals("\\r")){ late*+=getRLate*(name,te*t); //上下标 }elseif(name.startsWith("\\s")){ late*+=getSLate*(name,te*t); //\a矩阵\al左对齐;\ac居中;\ar右对齐;\con元素排成n列;\vsn行间增加n磅;\hsn列间增加n磅 }elseif(name.startsWith("\\a")){ late*+=getALate*(name,te*t); }elseif(name.startsWith("\\b")){ late*+=getBLate*(name,te*t); //平移 }elseif(name.startsWith("\\d")){ late*+=getDLate*(name,te*t); //积分 }elseif(name.startsWith("\\i")){ late*+=getILate*(name,te*t); //列表 }elseif(name.startsWith("\\l")){ late*+=getLLate*(name,te*t); //重叠 }elseif(name.startsWith("\\o")){ late*+=getOLate*(name,te*t); //框 }elseif(name.startsWith("\\*")){ late*+=get*Late*(name,te*t); //空白 }elseif(StringUtils.isBlank(name)){ late*+=parserElements(te*t); }else{ System.err.println("errorparserToLate*"); } returnlate*; } /** *根式屡次根式*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetRLate*(Stringname,Stringte*t){ Stringlate*=""; List<String>args=getArgs(te*t); if(args.size()==2){ late*+="\\sqrt["; late*+=parserElements(args.get(0)); late*+="]{"; late*+=parserElements(args.get(1)); late*+="}"; }elseif(args.size()==1){ late*+="\\sqrt{"; late*+=parserElements(args.get(0)); late*+="}"; }else{ System.err.println("errorgetRLate*"); } returnlate*; } /** *分式*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetFLate*(Stringname,Stringte*t){ Stringlate*=""; List<String>args=getArgs(te*t); if(args.size()==2){ late*+="\\frac{"; late*+=parserElements(args.get(0)); late*+="}{"; late*+=parserElements(args.get(1)); late*+="}"; }else{ System.err.println("errorgetFLate*"); } returnlate*; } /** *//\a矩阵\al左对齐;\ac居中;\ar右对齐;\con元素排成n列;\vsn行间增加n磅;\hsn列间增加n磅*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetALate*(Stringname,Stringte*t){ Stringlate*=""; List<String>args=getArgs(te*t); Stringn=name.replaceAll("^[\\S\\s]*\\\\co([0-9]*)[\\S\\s]*$","$1"); //列数intcol=1; if(n.matches("[0-9]*"))col=Integer.valueOf(n); for(inti=0;i<args.size();i++){ if(i!=0&&i%col==0){ late*+="\\\\"; } late*+=parserElements(args.get(i)); } returnlate*; } /** *左括号使用字符\lc\;右括号使用字符\rc\;左右括号都使用字符\bc\ *paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetBLate*(Stringname,Stringte*t){ Stringlate*=""; Stringlc=""; Stringrc=""; Stringbc=""; List<String>args=getArgs(te*t); name=name.replace(LEFTBRACKETRE,LEFTBRACKET) .replace(RIGHTBRACKETRE,RIGHTBRACKET); if(name.contains("\\lc\\")||name.contains("\\rc\\")){ lc=name.replaceAll("^[\\s\\S]*\\\\lc\\\\([\\s\\S])[\\s\\S]*$","$1"); rc=name.replaceAll("^[\\s\\S]*\\\\rc\\\\([\\s\\S])[\\s\\S]*$","$1"); lc=StringUtils.isBlank(lc)||lc.equals(name)"".":lc; rc=StringUtils.isBlank(rc)||rc.equals(name)"".":rc; //方程组处理if(lc.equals("{")&&rc.equals(".")){ late*+="\\begin{cases}"; for(inti=0;i<args.size();i++){ if(i!=0)late*+="\\\\"; late*+=parserElements(args.get(i)); } late*+="\\end{cases}"; //矩阵处理 }else{ lc=lc.replace("{","\\{"); rc=rc.replace("}","\\}"); late*+="\\left"+lc+"\\begin{matri*}"; for(inti=0;i<args.size();i++){ if(i!=0)late*+="\\\\"; late*+=parserElements(args.get(i)); } late*+="\\end{matri*}\\right"+rc; } }elseif(name.contains("\\bc\\")){ bc=name.replaceAll("^[\\s\\S]*\\\\bc\\\\([\\s\\S])[\\s\\S]*$","$1"); late*+="\\left"+bc+"\\begin{matri*}"; for(inti=0;i<args.size();i++){ if(i!=0)late*+="\\\\"; late*+=parserElements(args.get(i)); } late*+="\\end{matri*}\\right"+bc; }else{ System.err.println("errorgetBLate*"); } returnlate*; } /** *平移\fon右边n磅;\ban左边n磅;\li为下一个字符前的空白添加下划线*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetDLate*(Stringname,Stringte*t){ //TODO returnparserElements(te*t); } /** *积分*{EQ\i(a,b,3*+1d*)} *\su生成求和公式\pr生成求积公式\in积分限不在符号的上下,而在符号之右 *\fc\c将符号c设置为固定高度的字符\vc\c符号高度与第三个元素高度一致*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetILate*(Stringname,Stringte*t){ Stringlate*=""; Stringsym=""; List<String>args=getArgs(te*t); if(args.size()==3){ //默认上下标在符号上下//∑if(name.contains("\\su")){ sym="\\sum"; //上下标在右侧if(name.contains("\\in"))sym+="\\nolimits"; //Π }elseif(name.contains("\\pr")){ sym="\\prod"; if(name.contains("\\in"))sym+="\\nolimits"; //\int }elseif(name.contains("\\fc\\")){ sym=name.replace("^[\\s\\S]*\\fc\\([^\\\\(]*)[\\s\\S]*$","$1"); }else{ sym="\\int"; } late*+=sym+"_{"+parserElements(args.get(0))+"}^{"+parserElements(args.get(1))+"}"+parserElements(args.get(2)); }else{ System.err.println("errorgetILate*"); } returnlate*; } /** *\l():使用任意个数的元素组成列表。*paramnamename *paramte*tte*t *returnlate* */ privatestaticStringgetLLate*(Stringname,Stringte*t){ returnparserElements(te*t); } /** *重叠开关\o():将每个后续元素置于前一个元素之上*可用参数:左对齐\al;居中\ac;右对齐\ar *paramname *paramte*t *return */ privatestaticStringgetOLate*(Stringname,Stringte*t){ Stringlate*=""; List<String>args=getArgs(te*t); if(args.size()>=2){ Stringa1=parserElements(args.get(0)); Stringa2=parserElements(args.get(1)); if(!a1.startsWith("^")){ a1="^{"+a1+"}"; } if(!a2.startsWith("_")){ a2="_{"+a2+"}"; } late*+="{\\!\\,}"+a1+a2; for(inti=2;i<args.size();i++){ late*+=parserElements(args.get(i)); } returnlate*; } returnparserElements(te*t); } /** *\*():创立元素边框。* *可用参数:在元素的上面绘制一个边框\to;在元素的下面绘制一个边框\bo;在元素的左面绘制一个边框\le在元素的右面绘制一个边框\ri *paramname *paramte*t *returnlate* */ privatestaticStringget*Late*(Stringname,Stringte*t){ //\fbo*{} Stringlate*=parserElements(te*t); booleanle=false; booleanri=false; inti=0; if(name.contains("\\le")){ i++; le=true; } if(name.contains("\ri")){ i++; ri=true; } if(le||ri){ late*="\\left"+(le""|":".")+late*+"\right"+(ri""|":"."); } if(name.contains("\\to")){ i++; late*="\\overline{"+late*+"}"; } if(name.contains("\\bo")){ i++; late*="\\underline{"+late*+"}"; } if(i==0||i==4){ late*="\\fbo*{"+parserElements(te*t)+"}"; } returnlate*; } /** *\\upn文字上移由n指定的磅数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论