jack vor 6 Tagen
Ursprung
Commit
b4435d8c40
2 geänderte Dateien mit 30 neuen und 27 gelöschten Zeilen
  1. 1 1
      src/hooks/useImport.ts
  2. 29 26
      src/utils/prosemirror/schema/nodes.ts

+ 1 - 1
src/hooks/useImport.ts

@@ -35,7 +35,7 @@ const convertFontSizePtToPx = (html: string, ratio: number, autoFit: any) => {
   if (autoFit?.fontScale && autoFit?.type == "text") { ratio = ratio * autoFit.fontScale / 100; }
   // return html;
   return html.replace(/\s*([\d.]+)pt/g, (match, p1) => {
-    return `${(parseFloat(p1) * ratio) | 0}px `
+    return `${Math.ceil(parseFloat(p1) * ratio)}px `
   })
 
 }

+ 29 - 26
src/utils/prosemirror/schema/nodes.ts

@@ -101,16 +101,17 @@ const listItem: NodeSpec = {
   group: 'block',
 }
 */
+
 const listItem: NodeSpec = {
   attrs: {
-    align: { default: '' },
+    textAlign: { default: '' },      // 对应 CSS text-align
+    textAlignLast: { default: '' },  // 对应 CSS text-align-last
     textIndent: { default: '' },
     marginTop: { default: '' },
     marginBottom: { default: '' },
     marginLeft: { default: '' },
     marginRight: { default: '' },
     lineHeight: { default: '' },
-    // ✅ 新增 padding 属性
     paddingTop: { default: '' },
     paddingRight: { default: '' },
     paddingBottom: { default: '' },
@@ -133,17 +134,14 @@ const listItem: NodeSpec = {
         const marginLeft = style.marginLeft || '';
         const marginRight = style.marginRight || '';
         const lineHeight = style.lineHeight || '';
-        // ✅ 读取 padding 值
         const paddingTop = style.paddingTop || '';
         const paddingRight = style.paddingRight || '';
         const paddingBottom = style.paddingBottom || '';
         const paddingLeft = style.paddingLeft || '';
 
-        let align = textAlign || textAlignLast || '';
-        align = /^(left|right|center|justify)$/.test(align) ? align : '';
-
         return {
-          align,
+          textAlign,
+          textAlignLast,
           textIndent,
           marginTop,
           marginBottom,
@@ -160,7 +158,8 @@ const listItem: NodeSpec = {
   ],
   toDOM(node) {
     const {
-      align,
+      textAlign,
+      textAlignLast,
       textIndent,
       marginTop,
       marginBottom,
@@ -175,18 +174,20 @@ const listItem: NodeSpec = {
 
     let style = '';
 
-    if (align) {
-      style += `text-align: ${align}; text-align-last: ${align};`;
+    if (textAlign && textAlign !== 'left') {
+      style += `text-align: ${textAlign};`;
+    }
+    if (textAlignLast) {
+      style += `text-align-last: ${textAlignLast};`;
     }
     if (textIndent) {
-      style += `text-indent: ${textIndent};`;
+      style += `text-indent: (100% - ${textIndent});`;
     }
     if (marginTop) style += `margin-top: ${marginTop};`;
     if (marginBottom) style += `margin-bottom: ${marginBottom};`;
     if (marginLeft) style += `margin-left: ${marginLeft};`;
     if (marginRight) style += `margin-right: ${marginRight};`;
-    if (lineHeight) style += `line-height: ${lineHeight};`;
-    // ✅ 输出 padding
+    if (lineHeight) style += `line-height: ${lineHeight * 1.2};`;
     if (paddingTop) style += `padding-top: ${paddingTop};`;
     if (paddingRight) style += `padding-right: ${paddingRight};`;
     if (paddingBottom) style += `padding-bottom: ${paddingBottom};`;
@@ -199,10 +200,12 @@ const listItem: NodeSpec = {
   },
 };
 
+
 const paragraph: NodeSpec = {
   whitespace: "pre",
   attrs: {
-    align: { default: '' },
+    textAlign: { default: '' },      // 对应 CSS text-align
+    textAlignLast: { default: '' },  // 对应 CSS text-align-last
     indent: { default: 0 },
     textIndent: { default: 0 },
     marginTop: { default: '' },
@@ -210,7 +213,6 @@ const paragraph: NodeSpec = {
     marginLeft: { default: '' },
     marginRight: { default: '' },
     lineHeight: { default: '' },
-    // ✅ 新增 padding 属性
     paddingTop: { default: '' },
     paddingRight: { default: '' },
     paddingBottom: { default: '' },
@@ -226,23 +228,21 @@ const paragraph: NodeSpec = {
         const style = el.style;
 
         const textAlign = style.textAlign || '';
-        let align = el.getAttribute('align') || textAlign || '';
-        align = /^(left|right|center|justify)$/.test(align) ? align : '';
-
+        const textAlignLast = style.textAlignLast || '';
         const marginTop = style.marginTop || '';
         const marginBottom = style.marginBottom || '';
         const marginLeft = style.marginLeft || '';
         const marginRight = style.marginRight || '';
         const textIndent = style.textIndent || '';
         const lineHeight = style.lineHeight || '';
-        // ✅ 读取 padding
         const paddingTop = style.paddingTop || '';
         const paddingRight = style.paddingRight || '';
         const paddingBottom = style.paddingBottom || '';
         const paddingLeft = style.paddingLeft || '';
 
         return {
-          align,
+          textAlign,
+          textAlignLast,
           textIndent,
           marginTop,
           marginBottom,
@@ -267,7 +267,8 @@ const paragraph: NodeSpec = {
   ],
   toDOM: (node: Node) => {
     const {
-      align,
+      textAlign,
+      textAlignLast,
       textIndent,
       marginTop,
       marginBottom,
@@ -282,18 +283,20 @@ const paragraph: NodeSpec = {
 
     let style = '';
 
-    if (align && align !== 'left') {
-      style += `text-align: ${align};text-align-last: ${align};`;
+    if (textAlign && textAlign !== 'left') {
+      style += `text-align: ${textAlign};`;
+    }
+    if (textAlignLast) {
+      style += `text-align-last: ${textAlignLast};`;
     }
     if (textIndent) {
-      style += `text-indent: ${textIndent};`;
+      style += `text-indent: (100% - ${textIndent});`;
     }
     if (marginTop) style += `margin-top: ${marginTop};`;
     if (marginBottom) style += `margin-bottom: ${marginBottom};`;
     if (marginLeft) style += `margin-left: ${marginLeft};`;
     if (marginRight) style += `margin-right: ${marginRight};`;
-    if (lineHeight) style += `line-height: ${lineHeight};`;
-    // ✅ 输出 padding
+    if (lineHeight) style += `line-height: ${lineHeight * 1.2};`;
     if (paddingTop) style += `padding-top: ${paddingTop};`;
     if (paddingRight) style += `padding-right: ${paddingRight};`;
     if (paddingBottom) style += `padding-bottom: ${paddingBottom};`;