如何使用docx4j api设置linespacing?

时间:2013-04-17 09:19:08

标签: java apache-poi docx4j hwpf

  

块引用

您好, 我正在尝试使用docx4j api将doc转换为docx。我需要根据需要设置行间距。

  

块引用

1 个答案:

答案 0 :(得分:1)

您可以使用以下修改:

@@ -20,23 +20,30 @@

 package org.docx4j.convert.in;


 import java.io.FileInputStream;
+import java.math.BigInteger;

 import org.apache.log4j.Logger;
 import org.apache.poi.hwpf.HWPFDocument;
 import org.apache.poi.hwpf.usermodel.CharacterRun;
+import org.apache.poi.hwpf.usermodel.LineSpacingDescriptor;
 import org.apache.poi.hwpf.usermodel.Paragraph;
 import org.apache.poi.hwpf.usermodel.Range;
 import org.apache.poi.hwpf.usermodel.Section;
 import org.apache.poi.hwpf.usermodel.Table;
 import org.apache.poi.hwpf.usermodel.TableCell;
 import org.apache.poi.hwpf.usermodel.TableRow;
+import org.docx4j.XmlUtils;
+import org.docx4j.jaxb.Context;
 import org.docx4j.openpackaging.io.SaveToZipFile;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
+import org.docx4j.wml.PPr;
+import org.docx4j.wml.PPrBase.Spacing;
+import org.docx4j.wml.STLineSpacingRule;

@@ -152,10 +161,26 @@ public class Doc {
            wmlP = documentPart.createStyledParagraphOfText( stripSpace(styleName), null);

        } else {
            wmlP = documentPart.createParagraphOfText(null);
        }
+       
+       LineSpacingDescriptor lsd = p.getLineSpacing();
+       if (lsd==null || lsd.isEmpty()) {
+           // do nothing
+       } else {
+           PPr pPr = wmlP.getPPr();
+           if (pPr==null) {
+               pPr = Context.getWmlObjectFactory().createPPr();
+               wmlP.setPPr(pPr);
+           }
+           Spacing spacing = Context.getWmlObjectFactory().createPPrBaseSpacing();
+           spacing.setLine(lsd._dyaLine);
+           spacing.setLineRule(STLineSpacingRule.AUTO);
+           pPr.setSpacing(spacing);
+       }
+       

但_dyaLine不可见。

docx4j依赖于Apache POI的HWPF来读取二进制.doc,并且在POI中需要_dyaLine的getter。

请注意,导入docx的doc更像是一个非常基本的概念证明。

如果你想将doc转换为docx,保留一系列功能,我建议你通过JODConverter使用LibreOffice / OpenOffice。