init: WordFileParse docx→HTML 解析服务(含 Word EQ 域公式修复)
服务:Spring Boot 3.2 + docx4j 8.3.9,POST /api/v3/server_office_file/file/parse
接受 .docx,返回 HTML(公式 → LaTeX,图片 → RustFS 外链)
公式支持三类来源:
- OMML(Word 2007+ 公式) → Python omml_mathml2latex
- MathType OLE 对象 → Ruby mathtype2mathml → MathML → LaTeX
- Word EQ 域(老教辅主力) → EqToLatexUtil(本次新增)
本次改动:
1. 新增 java-svc/.../core/EqToLatexUtil.java:
移植自 jby backend-services office-core,EQ 语法 → LaTeX
(\f→\dfrac、\r→\sqrt、\i→\int/\sum/\prod、\s→^{}/_{}、\b→\left\right、
\a→array、\x→\boxed/\overline、\o\al 堆叠、圈码、化学符号、极限、连等式)
品牌标记 JBYU* → WPU*,与采集端一致
2. CtoMathFinder:接上 EQ 分支(原为 not-ported 桩),域代码经
EqToLatexUtil.convert 转 LaTeX 写入 eqLatexMap(WPEQNUM 占位符)
3. WordParseUtil.dealPlaceholder:EQ 的 LaTeX 同样加 \( \) 包裹
(原先因 WPEQNUM 例外不加包裹,前端/MathJax 不渲染)
修前症状:教辅 Word 里分式/方程组/上下标整段丢失(如 {−1/3, 1} 变成 {-,1})
修后实测:46 份教辅 2908 处 EQ 域全部还原,公式总数 2954 处、零未包裹残留
安全:application.yml(含 RustFS 密钥)不入库,提供 application.yml.example;
OssService 的 @Value 默认密钥已清空
This commit is contained in:
79
java-src/enums/AttrEnum.java
Normal file
79
java-src/enums/AttrEnum.java
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Decompiled with CFR 0.152.
|
||||
*/
|
||||
package com.jby.officecore.enums;
|
||||
|
||||
public enum AttrEnum {
|
||||
STYLE("style"),
|
||||
COLOR("color"),
|
||||
BACKGROUND_COLOR("background-color"),
|
||||
BACKGROUND("background"),
|
||||
FONT_WEIGHT("font-weight"),
|
||||
FONT_SIZE("font-size"),
|
||||
MIN_HEIGHT("min-height"),
|
||||
LINE_HEIGHT("line-height"),
|
||||
TEXT_ALIGN("text-align"),
|
||||
PADDING("padding"),
|
||||
PADDING_TOP("padding-top"),
|
||||
PADDING_RIGHT("padding-right"),
|
||||
PADDING_BOTTOM("padding-bottom"),
|
||||
PADDING_LEFT("padding-left"),
|
||||
TEXT_INDENT("text-indent"),
|
||||
MARGIN("margin"),
|
||||
MARGIN_TOP("margin-top"),
|
||||
MARGIN_RIGHT("margin-right"),
|
||||
MARGIN_BOTTOM("margin-bottom"),
|
||||
MARGIN_LEFT("margin-left"),
|
||||
VERTICAL_ALIGN("vertical-align"),
|
||||
FONT_FAMILY("font-family"),
|
||||
FONT_STYLE("font-style"),
|
||||
FACE("face"),
|
||||
SIZE("size"),
|
||||
HREF("href"),
|
||||
SRC("src"),
|
||||
WIDTH("width"),
|
||||
HEIGHT("height"),
|
||||
CLASS("class"),
|
||||
BORDER_STYLE("border-style"),
|
||||
COLSPAN("colspan"),
|
||||
ROWSPAN("rowspan"),
|
||||
TEXT_DECORATION("text-decoration"),
|
||||
BACKGROUND_IMAGE("background-image"),
|
||||
TINYMCE_HORIZONTAL_LINE("tinymce-horizontal-line"),
|
||||
TINYMCE_LINE_NUMBER("tinymce-line-number"),
|
||||
TEXT_EMPHASIS_POSITION("text-emphasis-position"),
|
||||
DATA_TYPE("data-type"),
|
||||
SEGMENT("segment"),
|
||||
BUSINESS("business"),
|
||||
LIST_STYLE_TYPE("list-style-type"),
|
||||
ALT("alt"),
|
||||
NAME("name"),
|
||||
DATA_HREF("data-href"),
|
||||
DATA_File_SUFFIX("data-file-suffix"),
|
||||
TINYMCE_LINK("tinymce-link"),
|
||||
DATA_RESOURCE_URL("data-resource-url"),
|
||||
DATA_COURSE_NETWORK_LESSON_RESOURCE_NAME("data-course-network-lesson-resource-name"),
|
||||
TINYMCE_HOLLOWOUT("tinymce-hollowOut"),
|
||||
TINYMCE_HIDDENONLY("tinymce-hiddenOnly"),
|
||||
TINYMCE_HIDDENANDANSWER("tinymce-hiddenAndAnswer"),
|
||||
BORDER("border"),
|
||||
BORDER_LEFT("border-left"),
|
||||
BORDER_BOTTOM("border-bottom"),
|
||||
BORDER_RIGHT("border-right"),
|
||||
BORDER_TOP("border-top"),
|
||||
BORDER_LEFT_COLOR("border-left-color"),
|
||||
BORDER_BOTTOM_COLOR("border-bottom-color"),
|
||||
BORDER_RIGHT_COLOR("border-right-color"),
|
||||
BORDER_TOP_COLOR("border-top-color");
|
||||
|
||||
private final String attr;
|
||||
|
||||
public String getAttr() {
|
||||
return this.attr;
|
||||
}
|
||||
|
||||
private AttrEnum(String attr) {
|
||||
this.attr = attr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user