text.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * @Author: LiZhiWei
  3. * @Date: 2025-05-14 15:14:03
  4. * @LastEditors: LiZhiWei
  5. * @LastEditTime: 2025-05-14 15:59:19
  6. * @Description:
  7. */
  8. import { convertPtToPxInContent } from '../utils/style'
  9. // 创建文本元素
  10. export function createTextElement (element) {
  11. const el = document.createElement('div')
  12. if (element.content) {
  13. // 转换内容中的pt单位为px单位
  14. const convertedContent = convertPtToPxInContent(element.content)
  15. el.innerHTML = convertedContent
  16. // 设置文本样式
  17. el.style.width = element.width + 'px'
  18. el.style.height = element.height + 'px'
  19. el.style.color = element.fontColor || '#000'
  20. el.style.fontSize = element.fontSize
  21. el.style.fontFamily = element.fontFamily || 'Arial'
  22. el.style.textAlign = element.align || 'left'
  23. el.style.fontWeight = element.bold ? 'bold' : 'normal'
  24. el.style.fontStyle = element.italic ? 'italic' : 'normal'
  25. el.style.textDecoration = element.underline ? 'underline' : 'none'
  26. el.style.position = 'absolute'
  27. el.style.top = element.top + 'px' || '0'
  28. el.style.left = element.left + 'px' || '0'
  29. el.style.zIndex = element.order
  30. el.style.whiteSpace = 'pre-wrap'
  31. // 添加垂直对齐支持
  32. el.style.display = 'flex'
  33. el.style.flexDirection = 'column'
  34. switch (element.vAlign) {
  35. case 'up':
  36. el.style.justifyContent = 'flex-start'
  37. break
  38. case 'mid':
  39. el.style.justifyContent = 'center'
  40. break
  41. case 'down':
  42. el.style.justifyContent = 'flex-end'
  43. break
  44. default:
  45. el.style.justifyContent = 'flex-start'
  46. }
  47. // 设置段落间距
  48. el.style.lineHeight = element.lineHeight + 'px' || '1.2'
  49. el.style.letterSpacing = element.charSpacing ? `${element.charSpacing}px` : 'normal'
  50. }
  51. return el
  52. }