块引用
嗨,我正在尝试使用 docx4j api 将 doc 转换为 docx。我需要根据需要设置行距。
块引用
您可以使用以下修改:
@@ -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。