如何使用docx.js实现Word表格单元格文本垂直旋转?
如何用docx.js实现Word表格单元格文本垂直显示?
你提到的textDirection属性确实不是用来旋转文本的——它控制的是文本的阅读方向(比如垂直排版的脚本语言),而非普通水平文本的旋转显示。下面给你两种可行的解决方案,对应Word里两种不同的垂直文本效果:
方案1:旋转文本实现垂直显示(适合英文/非垂直脚本)
如果只是想把普通水平文本旋转90度变成垂直排列,直接给段落添加textRotation属性即可。设置为270时,文本会从上到下垂直显示(若设为90则是从下到上):
import { TableRow, TableCell, Paragraph, TextRun, AlignmentType, VerticalAlign, HeightRule, convertMillimetersToTwip, WidthType } from "docx"; // ... new TableCell({ children: [ new Paragraph({ children: [ new TextRun({ text: `Some text here`, size: 28, }) ], alignment: AlignmentType.CENTER, textRotation: 270, // 核心:将文本旋转270度实现垂直显示 }) ], width: { size: convertMillimetersToTwip(10), type: WidthType.DXA, }, rowSpan: 16, verticalAlign: VerticalAlign.CENTER, }),
方案2:使用垂直文本方向实现原生垂直排版(适合中文等垂直脚本)
如果需要的是Word里「文本方向」设置中的原生垂直排版(字符从上到下堆叠,无旋转),则需要将单元格的textDirection设为TOP_TO_BOTTOM_LEFT_TO_RIGHT:
import { TableRow, TableCell, Paragraph, TextRun, AlignmentType, VerticalAlign, TextDirection, HeightRule, convertMillimetersToTwip, WidthType } from "docx"; // ... new TableCell({ children: [ new Paragraph({ children: [ new TextRun({ text: `这里是一些文本`, size: 28, }) ], alignment: AlignmentType.CENTER, }) ], textDirection: TextDirection.TOP_TO_BOTTOM_LEFT_TO_RIGHT, // 核心:设置原生垂直文本方向 width: { size: convertMillimetersToTwip(10), type: WidthType.DXA, }, rowSpan: 16, verticalAlign: VerticalAlign.CENTER, }),
两者的区别
- 旋转文本:本质是把水平文本转90度,字符本身还是横向的,适合英文等非垂直脚本。
- 原生垂直排版:字符是纵向排列的,符合中文、日文等垂直脚本的排版习惯,无旋转效果。
你之前使用的LEFT_TO_RIGHT_TOP_TO_BOTTOM是默认的水平阅读方向,所以没有产生垂直效果,替换成上述对应值即可解决问题。
内容的提问来源于stack exchange,提问作者Atip
相关产品推荐
相关产品推荐

