0

块引用

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

块引用

4

1 回答 1

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 转换为 docx,保留一系列功能,我建议您通过 JODConverter 使用 LibreOffice/OpenOffice。

于 2013-04-17T10:16:32.253 回答