块引用
您好, 我正在尝试使用docx4j api将doc转换为docx。我需要根据需要设置行间距。
块引用
答案 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。