Upload useExport.ts
Browse files
frontend/src/hooks/useExport.ts
CHANGED
|
@@ -996,14 +996,58 @@ export default () => {
|
|
| 996 |
|
| 997 |
else if (el.type === 'shape') {
|
| 998 |
if (el.special) {
|
| 999 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1000 |
|
| 1001 |
// 改进的尺寸检查逻辑
|
| 1002 |
if (!svgRef) {
|
| 1003 |
-
console.warn(`SVG element not found for shape ${el.id}`);
|
|
|
|
|
|
|
| 1004 |
continue;
|
| 1005 |
}
|
| 1006 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1007 |
// 获取多种尺寸信息进行判断
|
| 1008 |
const clientWidth = svgRef.clientWidth;
|
| 1009 |
const clientHeight = svgRef.clientHeight;
|
|
@@ -1070,12 +1114,27 @@ export default () => {
|
|
| 1070 |
// SVG序列化with错误处理
|
| 1071 |
let base64SVG;
|
| 1072 |
try {
|
|
|
|
|
|
|
|
|
|
| 1073 |
base64SVG = svg2Base64(svgRef);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1074 |
if (!base64SVG || base64SVG === 'data:image/svg+xml;base64,') {
|
| 1075 |
throw new Error('SVG serialization returned empty result');
|
| 1076 |
}
|
| 1077 |
} catch (error) {
|
| 1078 |
console.error(`SVG serialization failed for shape ${el.id}:`, error);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1079 |
continue;
|
| 1080 |
}
|
| 1081 |
|
|
|
|
| 996 |
|
| 997 |
else if (el.type === 'shape') {
|
| 998 |
if (el.special) {
|
| 999 |
+
// 调试:记录元素信息
|
| 1000 |
+
console.log(`Processing special shape ${el.id}:`, {
|
| 1001 |
+
type: el.type,
|
| 1002 |
+
special: el.special,
|
| 1003 |
+
width: el.width,
|
| 1004 |
+
height: el.height,
|
| 1005 |
+
left: el.left,
|
| 1006 |
+
top: el.top
|
| 1007 |
+
});
|
| 1008 |
+
|
| 1009 |
+
// 尝试多种选择器策略
|
| 1010 |
+
let svgRef = document.querySelector(`.thumbnail-list .base-element-${el.id} svg`) as HTMLElement;
|
| 1011 |
+
|
| 1012 |
+
if (!svgRef) {
|
| 1013 |
+
// 尝试其他可能的选择器
|
| 1014 |
+
svgRef = document.querySelector(`[data-element-id="${el.id}"] svg`) as HTMLElement;
|
| 1015 |
+
}
|
| 1016 |
+
|
| 1017 |
+
if (!svgRef) {
|
| 1018 |
+
svgRef = document.querySelector(`#element-${el.id} svg`) as HTMLElement;
|
| 1019 |
+
}
|
| 1020 |
+
|
| 1021 |
+
if (!svgRef) {
|
| 1022 |
+
// 尝试查找所有SVG元素并匹配
|
| 1023 |
+
const allSvgs = document.querySelectorAll('svg');
|
| 1024 |
+
console.log(`Found ${allSvgs.length} SVG elements in document`);
|
| 1025 |
+
|
| 1026 |
+
for (let i = 0; i < allSvgs.length; i++) {
|
| 1027 |
+
const svg = allSvgs[i] as HTMLElement;
|
| 1028 |
+
const parent = svg.closest(`[class*="${el.id}"]`);
|
| 1029 |
+
if (parent) {
|
| 1030 |
+
svgRef = svg;
|
| 1031 |
+
console.log(`Found SVG for ${el.id} using parent matching`);
|
| 1032 |
+
break;
|
| 1033 |
+
}
|
| 1034 |
+
}
|
| 1035 |
+
}
|
| 1036 |
|
| 1037 |
// 改进的尺寸检查逻辑
|
| 1038 |
if (!svgRef) {
|
| 1039 |
+
console.warn(`SVG element not found for shape ${el.id} after trying multiple selectors`);
|
| 1040 |
+
console.log('Available elements with class containing element ID:',
|
| 1041 |
+
document.querySelectorAll(`[class*="${el.id}"]`));
|
| 1042 |
continue;
|
| 1043 |
}
|
| 1044 |
|
| 1045 |
+
console.log(`Found SVG element for ${el.id}:`, {
|
| 1046 |
+
tagName: svgRef.tagName,
|
| 1047 |
+
className: svgRef.className,
|
| 1048 |
+
innerHTML: svgRef.innerHTML.substring(0, 200) + '...'
|
| 1049 |
+
});
|
| 1050 |
+
|
| 1051 |
// 获取多种尺寸信息进行判断
|
| 1052 |
const clientWidth = svgRef.clientWidth;
|
| 1053 |
const clientHeight = svgRef.clientHeight;
|
|
|
|
| 1114 |
// SVG序列化with错误处理
|
| 1115 |
let base64SVG;
|
| 1116 |
try {
|
| 1117 |
+
console.log(`Starting SVG serialization for ${el.id}`);
|
| 1118 |
+
console.log('SVG content before serialization:', svgRef.outerHTML.substring(0, 500) + '...');
|
| 1119 |
+
|
| 1120 |
base64SVG = svg2Base64(svgRef);
|
| 1121 |
+
|
| 1122 |
+
console.log(`SVG serialization result for ${el.id}:`, {
|
| 1123 |
+
success: !!base64SVG,
|
| 1124 |
+
length: base64SVG ? base64SVG.length : 0,
|
| 1125 |
+
preview: base64SVG ? base64SVG.substring(0, 100) + '...' : 'null'
|
| 1126 |
+
});
|
| 1127 |
+
|
| 1128 |
if (!base64SVG || base64SVG === 'data:image/svg+xml;base64,') {
|
| 1129 |
throw new Error('SVG serialization returned empty result');
|
| 1130 |
}
|
| 1131 |
} catch (error) {
|
| 1132 |
console.error(`SVG serialization failed for shape ${el.id}:`, error);
|
| 1133 |
+
console.log('SVG element that failed:', svgRef);
|
| 1134 |
+
console.log('SVG outerHTML:', svgRef.outerHTML);
|
| 1135 |
+
|
| 1136 |
+
// 尝试降级处理
|
| 1137 |
+
console.log(`Attempting fallback processing for shape ${el.id}`);
|
| 1138 |
continue;
|
| 1139 |
}
|
| 1140 |
|