Aspose.Words插入分页符后第二页线条形状不显示问题咨询
问题描述
- 需求:4个线条形状需要在所有页面正常打印显示
- 异常现象:运行
generateWord()函数生成文档后,仅第二页的形状无法正常显示打印 - 已提供存在该问题的Word样例文件
question.docx
相关代码
generateWord() 函数
private fun generateWord(path: String) { val document = Document() val builder = DocumentBuilder(document) DocumentUtils.generateLine(builder) builder.insertBreak(BreakType.PAGE_BREAK) DocumentUtils.generateLine(builder) builder.insertBreak(BreakType.PAGE_BREAK) DocumentUtils.generateLine(builder) builder.insertBreak(BreakType.PAGE_BREAK) DocumentUtils.generateLine(builder) document.save(path) }
generateLine() 函数
fun generateLine(builder: DocumentBuilder) { builder.also { it.insertParagraph() val shape = Shape(builder.document, ShapeType.LINE).apply { width = 452.0 top = 10.0 } it.insertNode(shape) } }
故障原因
插入线条形状时仅指定了宽度和固定top偏移值,没有设置形状的锚定位置规则,默认插入的浮动形状会锚定到当前光标所在的段落。
第二页对应的线条,实际锚定到了第一页末尾携带分页符的段落上,设置的10pt顶部偏移让形状被渲染到第一页页边距外的不可见区域,既不在第一页的可视打印范围,也不会落到第二页的渲染区域,因此无法正常显示。其余三页的线条锚定段落和所属页面匹配,所以可以正常显示。
修复方案
修改generateLine()方法,插入新段落后将光标移动到该段落内,保证形状锚点落在当前新段落上,同时显式指定形状的相对位置规则,参考代码如下:
fun generateLine(builder: DocumentBuilder) { builder.also { val targetPara = it.insertParagraph() // 将光标移动到新插入的段落,确保形状锚定到该段落 it.moveTo(targetPara) val shape = Shape(builder.document, ShapeType.LINE).apply { width = 452.0 top = 10.0 // 显式指定位置参考规则 relativeVerticalPosition = RelativeVerticalPosition.PARAGRAPH relativeHorizontalPosition = RelativeHorizontalPosition.MARGIN left = 0.0 } it.insertNode(shape) } }
如果不需要浮动排版的线条,也可以直接设置shape.wrapType = WrapType.INLINE将线条改为嵌入型,随段落自动排布,就不会出现锚点错位导致的显示异常。
内容的提问来源于stack exchange,提问作者nkhcode
相关产品推荐
相关产品推荐

