Office 에서 수학 공식 을 자바 로 해석 합 니 다.
latex 표현 식 을 사용 하여 보존 하고 렌 더 링 합 니 다.그 중의 한 항목 에서 하나의 수 요 는 office 문서 Word 또는 Excel 에서 문제 내용 을 데이터베이스 로 가 져 오 는 것 이다. 문제 내용 에는 수학 공식 이 포 함 될 수 있 고 문서 에서 편집 하려 면 office 의 공식 플러그 인 을 사용 하여 공공 요 소 를 쓰 는 것 이다.사실 회사 의 이전 제품 은 이미 사용 .net 하여 이 기능 을 실현 한 적 이 있 지만 현재 회사 의 전면적 인 전환 Java 은 우리 도 적용 Java 의 해결 방안 을 연구 해 야 한다.office 문서 의 공식 편집기
mathtype 플러그 인
mathtype 은 제3자 수학 공식 플러그 인 으로
Office 문서 에서 편집 을 사용 하고 공식 벡터 그림 이 있 는 ole 대상 을 문서 에 삽입 할 수 있 습 니 다.원래 .net 의 방안 은 이 방식 을 사용 하여 mathtype 제 공 된 c# 라 이브 러 리 패 키 지 를 사용 하여 ole 대상 을 분석 하고 LaTeX 표현 식 을 추출 하 는 것 이다.하지만 순수 Java 환경 에 서 는 할 수 없다.오피스 공식 편집기
2007 판 부터
Office 공식 편집기 도 자체 적 으로 가 져 왔 다.2007 판 Word 과 Excel 사이 에 다른 것 은 전자 가 삽입 한 공식 대상 은 Office MathML 노드 이 고 후자 가 삽입 한 것 은 ole 이다.2010 판 부터 두 제품 의 공식 편집기 가 삽 입 된 것 은 모두 Office MathML 노드 이지 만 공식 대상 의 기본 문자 인 코딩 처리 가 다르다.이런 차이 점 을 보면 같은 제품 Office 에 속 하 더 라 도 그들 사이 에는 일치 하지 않 는 부분 이 많다 는 것 을 알 수 있다.공식 표현 식
LaTeX
LaTeX 는 ΤΕΧ 을 바탕 으로 하 는 조판 시스템 으로 인쇄 품질 이 높 은 과학 기술 과 수학 문 서 를 만 드 는 데 매우 적합 하 다.예 를 들 어 피타 고 라 스 정리 용 LaTeX 으로 표현 한다.a^{2}+b^{2}=c^{2}
자주 사용 하 는
LaTeX 렌 더 링 구성 요 소 는 MathJax 입 니 다.우리 가 프로젝트 에서 사용 하 는 것 은 바로 LaTeX 이기 때문에 이번 연 구 는 Office 중의 공식 대상 을 어떻게 LaTeX 표현 식 으로 바 꾸 는 지 하 는 것 이다.Mathml
전 칭 수학 표기 언어 (Mathematical Markup Language) 는
XML 를 바탕 으로 인터넷 에서 수학 기호 와 공식 을 쓰 는 표기 언어 이다.예 를 들 어 표현 식:
Office MathML (OMML)
office2007 이후 버 전에 서 편집 한 공식 대상 은 바로 OMML 이다.OMML 는 office 협조 Office Open Xml 를 위해 제 정 된 수학 표기 언어 다.예 를 들 면:
π
2
관 계 를 바꾸다
우리 가 프로젝트 에서 사용 하 는 세 가지 관 계 는
OMML - > MathML - > LaTex Office 설치 디 렉 터 리 에서 OMML 를 MathML 로 전환 하 는 xsl 도 구 를 제공 했다. MML2OMML.XSL MathML 전환 LaTex 은 인터넷 으로 다른 xsl 도구 인 mmltex. xsl 을 찾 을 수 있 도록 한다.Office 문서 Java 분석
2007 과 이전 버 전
한 단락
Office 을 사용 한 학생 들 은 모두 알 고 있다. Office 문 서 는 word 과 wordx 두 가지 유형 으로 나 뉘 는데 각각 2007 년 이전 과 그 후의 버 전 형식 에 대응한다.2007 이전 버 전에 사 용 된 Office 문 서 는 바 이 너 리 파일 입 니 다.그 다음 버 전에 서 x 는 xml 새 버 전의 Office 문 서 를 Office Open Xml 로 정의 하 는 파일 형식 을 나타 낸다.만약 우리 가 wordx 파일 의 확장 자 를 zip 로 바 꾸 면 Word 문서 에 포 함 된 모든 내용 을 정상적으로 압축 해제 할 수 있다.POI
정보 시스템 을 사용 한 학생 들 은 모두 통계
Java 문 서 를 생 성하 거나 분석 Excel 데 이 터 를 가 져 오 는 기능 을 만 났 다 고 믿 습 니 다.이때 우리 가 가장 많이 사용 하 는 개발 라 이브 러 리 는 Apache POI 다.Excel 바 이 너 리 와 POI 문 서 를 지원 하여 우리 의 대부분 Office Open Xml 문서 분석 수 요 를 만족 시 킬 수 있 습 니 다.해석 공식 실례
먼저 우리 의 기능 제한 을 설명해 야 한다.
Office 및 이상 Office2010 문서 만 을 대상 으로 Office Open Xml 와 Word 모두 가능 하 다.그 중에서 Excel 의 공식 수학 문 자 는 일반 문자 로 바 뀌 어야 한다. 그렇지 않 으 면 Excel 식별 할 수 없 는 문자 가 나타 날 것 이다.여 기 는 Java 문 서 를 예 로 들 어 분석 과정 을 설명 한다.기능 실현 사고
이 기능 의 관건 은
Excel 문서 의 공식 노드 Office 를 어떻게 얻 느 냐 에 있다. OMML 를 얻 은 후에 우 리 는 상기 두 도 구 를 사용 하여 OMML 로 전환 할 수 있다.OMML 획득
LaTeX 문서 가 Excel 라 는 것 을 알 았 으 니 xml 분석 도 구 를 사용 하여 xml 노드 를 읽 으 면 됩 니 다.먼저 OMML 로 조작 한 POI:String basePath = "f:\\";
FileInputStream fis = new FileInputStream(basePath + "math.xlsx");
OPCPackage pack = OPCPackage.open(fis);
XSSFWorkbook workbook = new XSSFWorkbook(pack);
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFSheet 문서 에 삽 입 된 그림, 공식 과 다른 요 소 는 모두 Excel 라 는 단독 drawing 파일 에 저 장 된 것 으로 그 중의 노드 는 요소 가 배 치 된 위치 정 보 를 기록 했다.xml 로 POI 원 소 를 얻 을 수 있 습 니 다.XSSFDrawing dr = sheet.getDrawingPatriarch();
CTDrawing drawing = dr.getCTDrawing();
CTOneCellAnchor[] oneCells = drawing.getOneCellAnchorArray(); // 、
각
drawing 의 CTOneCellAnchor 에 요소 의 위치 정 보 를 포함 하고 X 좌표, Y 좌표, 행, 소재 열 등 을 포함 하 며 더욱 중요 한 것 은 그림 이나 공식 적 인 묘사 노드 이다.xml 노드 이름 은 OMML 입 니 다. 여기 서 우 리 는 m:oMathPara 의 dom4j 를 사용 하여 얻 을 수 있 습 니 다 xpath.CTOneCellAnchor c = oneCells[0];
String xml = c.xmlText(); // xml
//dom4j
SAXReader reader = reader = new SAXReader(new DocumentFactory());
Map map=new HashMap();
map.put("xdr","http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
map.put("m","http://schemas.openxmlformats.org/officeDocument/2006/math");
reader.getDocumentFactory().setXPathNamespaceURIs(map); //xml namespace
InputSource source = new InputSource(new StringReader(xml));
source.setEncoding("utf-8");
Document doc = reader.read(source);
Element root = doc.getRootElement();
Element e = (Element)root.selectSingleNode("//m:oMathPara"); // xpath OMML
String omml = e.asXML(); // xml
OMML 을 Mathml 및 LaTeX 로 변환
순조롭게
OMML 를 얻 으 면 OMML 전환 도 구 를 사용 하여 xsl 와 Mathml 를 얻 을 수 있다.여기에 먼저 LaTeX 변환 도구 방법 을 쓰 고 xsl 도 구 를 사용 하여 실현 합 니 다./**
* Description: xsl
*/
public static String xslConvert(String s, String xslpath, URIResolver uriResolver){
TransformerFactory tFac = TransformerFactory.newInstance();
if(uriResolver != null) tFac.setURIResolver(uriResolver);
StreamSource xslSource = new StreamSource(MathmlUtils.class.getResourceAsStream(xslpath));
StringWriter writer = new StringWriter();
try {
Transformer t = tFac.newTransformer(xslSource);
Source source = new StreamSource(new StringReader(s));
Result result = new StreamResult(writer);
t.transform(source, result);
} catch (TransformerException e) {
logger.error(e.getMessage(), e);
}
return writer.getBuffer().toString();
}
/**
* Description: mathml latx
* @param mml
* @return
*/
public static String convertMML2Latex(String mml){
mml = mml.substring(mml.indexOf("?>")+2, mml.length()); // xml
URIResolver r = new URIResolver(){ // xls
@Override
public Source resolve(String href, String base) throws TransformerException {
InputStream inputStream = MathmlUtils.class.getResourceAsStream("/conventer/mml2tex/" + href);
return new StreamSource(inputStream);
}
};
String latex = xslConvert(mml, "/conventer/mml2tex/mmltex.xsl", r);
if(latex != null && latex.length() > 1){
latex = latex.substring(1, latex.length() - 1);
}
return latex;
}
/**
* Description: office mathml mml
* @param xml
* @return
*/
public static String convertOMML2MML(String xml){
String result = xslConvert(xml, "/conventer/OMML2MML.XSL", null);
return result;
}
이로써 우 리 는
javax.xml.transform 을 OMML 과 Mathml 표현 식 으로 바 꿀 수 있다.String mml = convertOMML2MML(omml);
String latex = convertMML2Latex(mml);
약간의 소감.
이 기능 을 실현 할 때 손 에 직접적인 자 료 를 참고 할 수 있 는 것 이 많 지 않 고 여러 가지 시행 착 오 를 거 쳤 으 며 인터넷 에서 찾 은 정보 도 많 고 유행 이 지 났 거나 말 을 반 으로 하 는 것 이다.동료 와 의 교류 에서 서로 다른 사고방식 을 사용 하여 많은
LaTeX 문 서 를 찾 아 본 데다 가 끊 임 없 는 시도 도 이 실 용적 이지 않 은 기능 을 완성 한 셈 이다.당신 자신 이 훌륭 하지 못 하 더 라 도 좋 은 팀 에서 당신 을 계속 밀 어 붙 일 수 있 습 니 다.한 사람 이 결국 얼마나 멀리 갈 수 있 는 지 는 당신 과 동행 하 는 사람 에 게 달 려 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.