Apache poi XWPF Paragraph行间距

时间:2014-05-14 17:00:04

标签: java apache coldfusion apache-poi

我正在尝试使用Java / Coldfusion中的Apache Poi构建word文档。到目前为止,除了段落的行距之外,它让我做了很多我想要的格式化。有谁知道如何将段落设置为单行间隔?它不断构建具有多个间隔段落的文档,间距为1.15。

以下是代码示例:

document = loader.create("org.apache.poi.xwpf.usermodel.XWPFDocument");
ParagraphAlignment = loader.create("org.apache.poi.xwpf.usermodel.ParagraphAlignment" );
paragraphOne = document.createParagraph();
paragraphOne.setAlignment(ParagraphAlignment.CENTER);

paragraphOneRunOne = paragraphVar.createRun();
paragraphOneRunOne.setFontFamily('Cambria');
paragraphOneRunOne.setFontSize(12);
paragraphOneRunOne.setBold(false);
paragraphOneRunOne.setText(Here's one line of text in this paragraph);
paragraphOneRunOne.addBreak();

paragraphOneRunTwo = paragraphVar.createRun();
paragraphOneRunTwo.setFontFamily('Cambria');
paragraphOneRunTwo.setFontSize(12);
paragraphOneRunTwo.setBold(false);
paragraphOneRunTwo.setText(Here's a second line of text in this paragraph);
paragraphOneRunTwo.addBreak();

我查看了示例和api文档,我找到的行间距的唯一设置决定了段落之前或之后的行间距,而不是文本行间距的段落内。

之前有人遇到过此问题,或者有任何关于如何修复它的例子?

3 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,并在通过ooxml-schemas源和生成的docx文件的内部后找到了解决方案。这是代码

public void setSingleLineSpacing(XWPFParagraph para) {
    CTPPr ppr = para.getCTP().getPPr();
    if (ppr == null) ppr = para.getCTP().addNewPPr();
    CTSpacing spacing = ppr.isSetSpacing()? ppr.getSpacing() : ppr.addNewSpacing();
    spacing.setAfter(BigInteger.valueOf(0));
    spacing.setBefore(BigInteger.valueOf(0));
    spacing.setLineRule(STLineSpacingRule.AUTO);
    spacing.setLine(BigInteger.valueOf(240));
}

答案 1 :(得分:1)

我最近必须使用POI的行间距,我的方法是获取段落并获取ooxml-schema

XWPFParagraph paragraph;
xml = paragraph->getCTP()->ToString();

然后架构将作为字符串存储在该xml变量中,您必须使用一些字符串函数从中检索该值

<w:spacing w:lineRule='atLeast' w:line='240' />

w:line是你需要的那个

希望这有帮助!

答案 2 :(得分:0)

paragraph.setSpacingBetween(1);

它将创建1

的行间距