|
|
|
|
|
|
|
(function() { |
|
console.log('=== PPT矢量元素导出测试开始 ==='); |
|
|
|
|
|
function testSVGElementDetection() { |
|
console.log('\n1. 测试SVG元素检测...'); |
|
|
|
const svgElements = document.querySelectorAll('svg'); |
|
console.log(`找到 ${svgElements.length} 个SVG元素`); |
|
|
|
svgElements.forEach((svg, index) => { |
|
const clientWidth = svg.clientWidth; |
|
const clientHeight = svg.clientHeight; |
|
const boundingRect = svg.getBoundingClientRect(); |
|
const computedStyle = window.getComputedStyle(svg); |
|
|
|
const hasValidSize = ( |
|
(clientWidth > 0 && clientHeight > 0) || |
|
(boundingRect.width > 0 && boundingRect.height > 0) || |
|
(parseFloat(computedStyle.width) > 0 && parseFloat(computedStyle.height) > 0) |
|
); |
|
|
|
console.log(`SVG ${index + 1}:`, { |
|
element: svg, |
|
clientSize: `${clientWidth}x${clientHeight}`, |
|
boundingRect: `${boundingRect.width}x${boundingRect.height}`, |
|
computedSize: `${computedStyle.width}x${computedStyle.height}`, |
|
hasValidSize, |
|
classes: svg.className.baseVal || svg.className |
|
}); |
|
}); |
|
} |
|
|
|
|
|
function testSVGSerialization() { |
|
console.log('\n2. 测试SVG序列化...'); |
|
|
|
const svgElements = document.querySelectorAll('svg'); |
|
let successCount = 0; |
|
let failCount = 0; |
|
|
|
svgElements.forEach((svg, index) => { |
|
try { |
|
const serializer = new XMLSerializer(); |
|
const svgString = serializer.serializeToString(svg); |
|
|
|
if (svgString && svgString.length > 0) { |
|
successCount++; |
|
console.log(`✓ SVG ${index + 1} 序列化成功 (${svgString.length} 字符)`); |
|
} else { |
|
failCount++; |
|
console.log(`✗ SVG ${index + 1} 序列化返回空字符串`); |
|
} |
|
} catch (error) { |
|
failCount++; |
|
console.log(`✗ SVG ${index + 1} 序列化失败:`, error.message); |
|
} |
|
}); |
|
|
|
console.log(`序列化结果: ${successCount} 成功, ${failCount} 失败`); |
|
} |
|
|
|
|
|
function testBase64Conversion() { |
|
console.log('\n3. 测试Base64转换...'); |
|
|
|
const svgElements = document.querySelectorAll('svg'); |
|
let successCount = 0; |
|
let failCount = 0; |
|
|
|
svgElements.forEach((svg, index) => { |
|
try { |
|
|
|
const clonedElement = svg.cloneNode(true); |
|
|
|
if (clonedElement.tagName.toLowerCase() === 'svg') { |
|
clonedElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); |
|
clonedElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); |
|
} |
|
|
|
const serializer = new XMLSerializer(); |
|
const svgString = serializer.serializeToString(clonedElement); |
|
|
|
if (!svgString || svgString.length === 0) { |
|
throw new Error('SVG序列化返回空字符串'); |
|
} |
|
|
|
const base64 = btoa(unescape(encodeURIComponent(svgString))); |
|
const dataUrl = `data:image/svg+xml;base64,${base64}`; |
|
|
|
if (base64 && base64.length > 0) { |
|
successCount++; |
|
console.log(`✓ SVG ${index + 1} Base64转换成功 (${dataUrl.length} 字符)`); |
|
} else { |
|
failCount++; |
|
console.log(`✗ SVG ${index + 1} Base64转换返回空字符串`); |
|
} |
|
} catch (error) { |
|
failCount++; |
|
console.log(`✗ SVG ${index + 1} Base64转换失败:`, error.message); |
|
} |
|
}); |
|
|
|
console.log(`Base64转换结果: ${successCount} 成功, ${failCount} 失败`); |
|
} |
|
|
|
|
|
function testShapeElementDetection() { |
|
console.log('\n4. 测试形状元素检测...'); |
|
|
|
|
|
const shapeElements = document.querySelectorAll('[class*="base-element-"]'); |
|
console.log(`找到 ${shapeElements.length} 个可能的形状元素`); |
|
|
|
shapeElements.forEach((element, index) => { |
|
const svg = element.querySelector('svg'); |
|
if (svg) { |
|
const elementId = element.className.match(/base-element-([^\s]+)/); |
|
console.log(`形状元素 ${index + 1}:`, { |
|
elementId: elementId ? elementId[1] : 'unknown', |
|
element: element, |
|
svg: svg, |
|
svgSize: `${svg.clientWidth}x${svg.clientHeight}`, |
|
hasValidSize: svg.clientWidth > 0 && svg.clientHeight > 0 |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
|
|
function testRenderWait() { |
|
console.log('\n5. 测试渲染等待机制...'); |
|
|
|
return new Promise((resolve) => { |
|
const startTime = performance.now(); |
|
|
|
|
|
document.body.offsetHeight; |
|
|
|
|
|
requestAnimationFrame(() => { |
|
requestAnimationFrame(() => { |
|
const endTime = performance.now(); |
|
console.log(`✓ 渲染等待完成,耗时: ${(endTime - startTime).toFixed(2)}ms`); |
|
resolve(); |
|
}); |
|
}); |
|
}); |
|
} |
|
|
|
|
|
async function runAllTests() { |
|
try { |
|
testSVGElementDetection(); |
|
testSVGSerialization(); |
|
testBase64Conversion(); |
|
testShapeElementDetection(); |
|
await testRenderWait(); |
|
|
|
console.log('\n=== 测试完成 ==='); |
|
console.log('如果发现问题,请检查:'); |
|
console.log('1. SVG元素是否正确渲染'); |
|
console.log('2. 元素尺寸是否有效'); |
|
console.log('3. SVG序列化是否成功'); |
|
console.log('4. Base64转换是否正常'); |
|
|
|
} catch (error) { |
|
console.error('测试过程中发生错误:', error); |
|
} |
|
} |
|
|
|
|
|
window.vectorExportTest = { |
|
runAllTests, |
|
testSVGElementDetection, |
|
testSVGSerialization, |
|
testBase64Conversion, |
|
testShapeElementDetection, |
|
testRenderWait |
|
}; |
|
|
|
console.log('测试函数已加载,使用 vectorExportTest.runAllTests() 运行所有测试'); |
|
|
|
|
|
runAllTests(); |
|
})(); |