Skip to content

Commit d30d85c

Browse files
committed
fix: 新增导出为图片功能,支持svg、png和jpg三种格式
1 parent 391f119 commit d30d85c

7 files changed

Lines changed: 437 additions & 37 deletions

File tree

package-lock.json

Lines changed: 3 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "latex-ocr-electron",
3-
"version": "3.4.0",
3+
"version": "3.5.0",
44
"description": "LaTeX公式识别工具 - Electron版本",
55
"author": "SimpleTex OCR",
66
"main": "dist/electron/electron/main.js",
@@ -30,6 +30,7 @@
3030
"react": "^18.2.0",
3131
"react-dom": "^18.2.0",
3232
"react-dropzone": "^14.2.3",
33+
"sharp": "^0.34.2",
3334
"styled-components": "^6.0.0"
3435
},
3536
"devDependencies": {
@@ -44,7 +45,6 @@
4445
"electron": "^27.0.0",
4546
"electron-builder": "^24.6.0",
4647
"react-scripts": "^5.0.1",
47-
"sharp": "^0.34.2",
4848
"typescript": "^4.9.5",
4949
"wait-on": "^7.0.1"
5050
},

src/App.tsx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import ImageDisplay from './components/ImageDisplay';
88
import LatexEditor from './components/LatexEditor';
99
import StatusBar from './components/StatusBar';
1010
import CopyButton from './components/CopyButton';
11+
import ExportButton from './components/ExportButton';
1112
import ApiSettingsDialog from './components/ApiSettingsDialog';
1213
import ShortcutSettingsDialog from './components/ShortcutSettingsDialog';
1314
import HistoryDialog from './components/HistoryDialog';
@@ -1141,6 +1142,60 @@ function App() {
11411142
}
11421143
};
11431144

1145+
// 导出数学公式为图片
1146+
const handleExportFormula = async (format: 'svg' | 'png' | 'jpg') => {
1147+
if (!appState.latexCode.trim()) {
1148+
setAppState(prev => ({
1149+
...prev,
1150+
statusMessage: '❌ 请先识别或输入数学公式'
1151+
}));
1152+
return;
1153+
}
1154+
1155+
if (!window.electronAPI) {
1156+
setAppState(prev => ({
1157+
...prev,
1158+
statusMessage: '❌ 图片导出功能仅在桌面应用中可用'
1159+
}));
1160+
return;
1161+
}
1162+
1163+
try {
1164+
setAppState(prev => ({
1165+
...prev,
1166+
statusMessage: `🔄 正在导出为${format.toUpperCase()}格式...`
1167+
}));
1168+
1169+
const result = await window.electronAPI.exportFormulaImage(appState.latexCode, format);
1170+
1171+
if (result.success) {
1172+
setAppState(prev => ({
1173+
...prev,
1174+
statusMessage: `✅ ${result.message}`
1175+
}));
1176+
} else {
1177+
setAppState(prev => ({
1178+
...prev,
1179+
statusMessage: `❌ ${result.message}`
1180+
}));
1181+
}
1182+
1183+
// 3秒后恢复状态
1184+
setTimeout(() => {
1185+
setAppState(prev => ({
1186+
...prev,
1187+
statusMessage: '⚡ 准备就绪'
1188+
}));
1189+
}, 3000);
1190+
} catch (error) {
1191+
console.error(`导出${format.toUpperCase()}失败:`, error);
1192+
setAppState(prev => ({
1193+
...prev,
1194+
statusMessage: `❌ 导出${format.toUpperCase()}失败`
1195+
}));
1196+
}
1197+
};
1198+
11441199
if (!settings) {
11451200
return <div>加载中...</div>;
11461201
}
@@ -1180,6 +1235,10 @@ function App() {
11801235
onCopy={handleCopy}
11811236
disabled={!appState.latexCode.trim() || appState.isRecognizing}
11821237
/>
1238+
<ExportButton
1239+
onExport={handleExportFormula}
1240+
disabled={!appState.latexCode.trim() || appState.isRecognizing}
1241+
/>
11831242
</ButtonContainer>
11841243
</BottomSection>
11851244
</MainContent>

0 commit comments

Comments
 (0)