已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Word转html存在域代码丢失。Aspose ,jacob,poi都无法解决在使用jocob转换成html时 域代码会被包裹可以统一提取出来转换成latex ,latex转换成图片,解决word域代码丢失问题private void processFormula(List nodes) throws UnsupportedEncodingExceptionfor(int i = nodes.size()-1;i=0;i-)Node node =nodes.get(i);if(node instanceof Element)Element e = (Element)node;processFormula(e.childNodes();else if(node instanceof Comment)String commentText = node.toString();if(commentText.contains()Comment comment = (Comment)node;String latex = EqFormulaLatexUtil.getLatex(comment);if(StringUtils.isNotBlank(latex)String latexTemp = new String(Base64.encodeBase64(latex.getBytes();latex = URLEncoder.encode(latex, utf-8);latex = latex.replace(+, %20);String url = LATEXURL+latex;node.after();/* * */package .tlsys.rawpaper2x.utils;import java.io.File;import java.io.IOException;import .URLEncoder;import java.util.ArrayList;import java.util.List;import org.jsoup.Jsoup;import org.jsoup.nodes.Comment;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import org.springframework.util.CollectionUtils;import mon.util.StringUtils;/* * author feiwang8 * * 2016年8月24日 下午3:45:05 */public class EqFormulaLatexUtil /* * 左括号替代符号 */public static final String LEFTBRACKETRE = ;/* * 右括号替代符号 */public static final String RIGHTBRACKETRE = ;/* * 左括号 */public static final String LEFTBRACKET = (;/* * 右括号 */public static final String RIGHTBRACKET = );/* * 双正则 */public static final String REGEXPART_F=(sS*)|()+),(sS*)|()+)$;/* * 单正则 */public static final String REGEXPART=(sS*)|()+);/* * 逗号替代符号 */public static final String COMMARE = ;/* * 逗号 */public static final String COMMA = ,;/* * 更加comment 获取 latex * param comment html Comment * return latex */public static String getLatex(Comment comment)return getLatex(comment.toString();/* * 根据comment 获取 latex * param comment html Comment * return latex */public static String getLatex(String comment)String html = comment.replace(, ).replace(, ).replace(char) 10 + , ).replace(char) 13 + , );Document doc = Jsoup.parse(html);Elements sups = doc.select(sup);Elements subs = doc.select(sub);/纠正上标 for(Element sup:sups)String text = sup.text();sup.tagName(span);sup.text(s(+text+, );/纠正下标for(Element sub:subs)String text = sub.text();sub.tagName(span);sub.text(s( ,+text+);String eqtext = doc.body().text();eqtext = mergeSubSup(eqtext);/ 无法被StringUtil 判断为空白的空白eqtext = eqtext.replace(char) 8203 + , );eqtext = eqtext.replace(char) 160 + , ).replace( , );eqtext = eqtext.trim();/System.out.println(eqtext+-);if(eqtext.startsWith(eq)eqtext = eqtext.replaceFirst(eq, ).trim();eqtext = eqtext.replace(+LEFTBRACKET, +LEFTBRACKETRE).replace(+RIGHTBRACKET, +RIGHTBRACKETRE).replace(+COMMA, +COMMARE);String latex = parserElements(eqtext);return latex.replace(+LEFTBRACKETRE, +LEFTBRACKET).replace(+RIGHTBRACKETRE, +RIGHTBRACKET).replace(+COMMARE, +COMMA);return ;private static String mergeSubSup(String latex)/这里需要合并上下标 例如:eq isu(s(i, )s(, )s(1, ),s( ,3),x)/-eq isu(s(i1, ),s( ,3),x)/TODOreturn latex;/* * * param eqtext * return */private static String parserElements(String eqtext)String latex = ;if(eqtext.contains()&eqtext.contains(LEFTBRACKET)&eqtext.contains(RIGHTBRACKET)String preText = eqtext.substring(0,eqtext.indexOf();int startIndex = eqtext.indexOf();int endIndex= getNextLeftBra(startIndex,(,eqtext);int nextBra = getNextBraIndex(endIndex+1,eqtext);String name = eqtext.substring(startIndex,endIndex);String text = eqtext.substring(endIndex+1,nextBra);String suffText= eqtext.substring(nextBra+1,eqtext.length();latex = parserElements(preText) + parserToLatex(name.trim(),text) +parserElements(suffText);elselatex = eqtext;return latex;private static int getNextLeftBra(int start,char sym,String eqtext)for(int i =start;ieqtext.length();i+ )char leftbra = eqtext.charAt(i);if(leftbra = sym)return i;return eqtext.length();/* * 获取配对括号的位置 * param text 文本 * return 位置 */private static int getNextBraIndex(int start,String text)int leftbra = 0;int rightbra = 0;for(int i = start-1 ; i=start)return i;return 0;private static String parserToLatex(String name,String text)String latex = ;name = name.toLowerCase();/分式if(name.equals(f)latex +=getFLatex(name, text);/根式else if(name.equals(r)latex +=getRLatex(name, text);/上下标else if(name.startsWith(s)latex+=getSLatex(name, text);/a矩阵al左对齐;ac居中;ar右对齐;con元素排成 n 列;vsn行间增加 n 磅;hsn列间增加n磅else if(name.startsWith(a)latex += getALatex(name, text);else if(name.startsWith(b)latex+=getBLatex(name, text);/平移else if(name.startsWith(d)latex+=getDLatex(name, text);/积分else if(name.startsWith(i)latex+=getILatex(name, text);/列表else if(name.startsWith(l)latex+=getLLatex(name, text);/重叠else if(name.startsWith(o)latex+=getOLatex(name, text);/框else if(name.startsWith(x)latex+=getXLatex(name, text);/空白else if(StringUtils.isBlank(name)latex+=parserElements(text);elseSystem.err.println(error parserToLatex);return latex;/* * 根式 多次根式 * param name name * param text text * return latex */private static String getRLatex(String name,String text)String latex = ;List args = getArgs(text);if(args.size()=2)latex += sqrt;latex +=parserElements(args.get(0);latex +=;latex +=parserElements(args.get(1);latex +=;else if(args.size()=1)latex += sqrt;latex +=parserElements(args.get(0);latex +=;elseSystem.err.println(error getRLatex);return latex;/* * 分式 * param name name * param text text * return latex */private static String getFLatex(String name,String text)String latex = ;List args = getArgs(text);if(args.size()=2)latex += frac;latex +=parserElements(args.get(0);latex +=;latex +=parserElements(args.get(1);latex +=;elseSystem.err.println(error getFLatex);return latex;/* * /a矩阵al左对齐;ac居中;ar右对齐;con元素排成 n 列;vsn行间增加 n 磅;hsn列间增加n磅 * param name name * param text text * return latex */private static String getALatex(String name,String text)String latex = ;List args =getArgs(text);String n = name.replaceAll(Ss*co(0-9*)Ss*$, $1);/列数int col = 1;if(n.matches(0-9*) col = Integer.valueOf(n);for(int i = 0 ;iargs.size();i+)if(i!=0&i%col=0)latex += ;latex += parserElements(args.get(i);return latex;/* * 左括号使用字符 lc;右括号使用字符 rc;左右括号都使用字符bc * param name name * param text text * return latex */private static String getBLatex(String name,String text)String latex = ;String lc=;String rc=;String bc=;List args =getArgs(text);name = name.replace(LEFTBRACKETRE,LEFTBRACKET).replace(RIGHTBRACKETRE, RIGHTBRACKET);if(name.contains(lc)|name.contains(rc)lc = name.replaceAll(sS*lc(sS)sS*$, $1);rc = name.replaceAll(sS*rc(sS)sS*$, $1);lc = StringUtils.isBlank(lc)|lc.equals(name)?.:lc;rc = StringUtils.isBlank(rc)|rc.equals(name)?.:rc;/方程组处理if(lc.equals()&rc.equals(.)latex+=begincases;for(int i = 0 ;iargs.size();i+)if(i!=0)latex += ;latex += parserElements(args.get(i);latex+=endcases;/矩阵处理elselc = lc.replace(, );rc = rc.replace(, );latex+=left+lc+beginmatrix;for(int i = 0 ;iargs.size();i+)if(i!=0)latex += ;latex += parserElements(args.get(i);latex+=endmatrixright+rc;else if(name.contains(bc)bc = name.replaceAll(sS*bc(sS)sS*$, $1);latex+=left+bc+beginmatrix;for(int i = 0 ;iargs.size();i+)if(i!=0)latex += ;latex += parserElements(args.get(i);latex+=endmatrixright+bc;elseSystem.err.println(error getBLatex);return latex;/* * 平移 fon右边n磅;ban左边n磅;li为下一个字符前的空白添加下划线 * param name name * param text text * return latex */private static String getDLatex(String name,String text)/TODOreturn parserElements(text);/* * 积分 * EQ i (a,b,3x+1 dx) * su 生成求和公式 pr 生成求积公式 in 积分限不在符号的上下,而在符号之右 * fcc将符号c设置为固定高度的字符 vcc 符号高度与第三个元素高度一致 * param name name * param text text * return latex */private static String getILatex(String name,String text)String latex = ;String sym = ;List args = getArgs(text);if(args.size()=3)/默认上下标在符号上下/if(name.contains(su)sym = sum;/上下标在右侧if(name.contains(in)sym+=nolimits;/else if(name.contains(pr)sym = prod;if(name.contains(in)sym+=nolimits;/int else if(name.contains(fc)sym = name.replace(sS*fc( (*)sS*$, $1);elsesym = int;latex+=sym+_+parserElements(args.get(0)+parserElements(args.get(1)+parserElements(args.get(2);elseSystem.err.println(error getILatex);return latex;/* * l(): 使用任意个数的元素组成列表。 * param name name * param text text * return latex */private static String getLLatex(String name,String text)return parserElements(text);/* * 重叠开关o(): 将每个后续元素置于前一个元素之上 * 可用参数:左对齐al;居中ac;右对齐ar * param name * param text * return */private static String getOLatex(String name,String text)String latex = ;List args = getArgs(text);if(args.size()=2)String a1=parserElements(args.get(0);String a2=parserElements(args.get(1);if(!a1.startsWith()a1=+a1+;if(!a2.startsWith(_)a2=_+a2+;latex+=!,+a1+a2;for(int i=2;iargs.size();i+)latex+=parserElements(args.get(i);return latex;return parserElements(text);/* * x(): 创建元素边框。 * * 可用参数:在元素的上面绘制一个边框to ;在元素的下面绘制一个边框 bo ;在元素的左面绘制一个边框le 在元素的右面绘制一个边框ri * param name * param text * return latex */private static String getXLatex(String name,String text)/fboxString latex = parserElements(text);boolean le =false;boolean ri =false;int i =0 ;if(name.contains(le)i+;le=true;if(name.contains(ri)i+;ri = true;if(le|ri)latex = left+(le?|:.)+latex+right+(ri?|:.);if(name.contains(to)i+;latex = overline+latex+;if(name.contains(bo)i+;latex = underline+latex+;if(i=0|i=4)latex =fbox+parserElements(text)+;return latex;/* * upn文字上移由n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年销售专员笔试模拟题及答案
- 2026年法务专员笔试仿真题含答案
- 2026年助理电子商务师考试电子商务基础考点
- 2026年注册安全工程师安全生产技术笔试模拟题
- 2026年护理综合能力测试题精
- 公益理念设计
- 目录设计规范
- 标志设计方法与实施策略
- 2026年市场营销考试题集及解析
- 2026年学生书法竞赛活动方案
- 2026年北京市大兴区社区工作者考试试题解析及答案
- 数据调查外包合同
- 2026上海大歌剧院管理有限公司夏季工作人员招聘137人笔试备考试题及答案解析
- 17《红军桥》课件 美术三年级下册 (赣美版2024)
- 塔吊基础监理实施细则
- 2026年大连市教育基金会招聘工作人员备考题库附答案详解(研优卷)
- 水洗砂、碎石采购方案投标文件(技术标)
- 上海市二级注册建造师继续教育(建筑工程)考试题库
- 雨课堂学堂在线学堂云《人工智能安全与伦理(北京航空航天)》单元测试考核答案
- 马克思主义基本原理概论课《第七章共产主义崇高理想及其最终实现》教案
- GB/T 47067-2026塑料模塑件公差和验收条件
评论
0/150
提交评论