java - docx4j 正确定位段落
问题描述
当我画一个段落时,段落移动了,但我用绝对位置绘制它为什么会发生这种情况是因为段落间距?这个函数创建一个段落。
public static P pTextBox(List<String> lines, float boxHeight, float boxWidth, float top, float left, Integer font) {
org.docx4j.wml.ObjectFactory wmlObjectFactory = Context.getWmlObjectFactory();
P p = wmlObjectFactory.createP();
Jc justification = wmlObjectFactory.createJc();
justification.setVal(JcEnumeration.RIGHT);
// Create object for r
R r = wmlObjectFactory.createR();
p.getContent().add(r);
// Create object for rPr
RPr rpr = wmlObjectFactory.createRPr();
r.setRPr(rpr);
// Create object for noProof
BooleanDefaultTrue booleandefaulttrue = wmlObjectFactory.createBooleanDefaultTrue();
rpr.setNoProof(booleandefaulttrue);
// Create object for pict (wrapped in JAXBElement)
Pict pict = wmlObjectFactory.createPict();
JAXBElement<org.docx4j.wml.Pict> pictWrapped = wmlObjectFactory.createRPict(pict);
r.getContent().add(pictWrapped);
org.docx4j.vml.ObjectFactory vmlObjectFactory = new org.docx4j.vml.ObjectFactory();
// Create object for shape (wrapped in JAXBElement)
org.docx4j.vml.CTShape shape = vmlObjectFactory.createCTShape();
JAXBElement<org.docx4j.vml.CTShape> shapeWrapped = vmlObjectFactory.createShape(shape);
pict.getAnyAndAny().add(shapeWrapped);
// Create object for textbox (wrapped in JAXBElement)
CTTextbox textbox = vmlObjectFactory.createCTTextbox();
JAXBElement<org.docx4j.vml.CTTextbox> textboxWrapped = vmlObjectFactory.createTextbox(textbox);
shape.getEGShapeElements().add(textboxWrapped);
// Create object for txbxContent
org.docx4j.wml.CTTxbxContent txbxcontent = wmlObjectFactory.createCTTxbxContent();
textbox.setTxbxContent(txbxcontent);
// Create object for p
org.docx4j.wml.P p2 = wmlObjectFactory.createP();
txbxcontent.getContent().add(p2);
// Create object for pPr
org.docx4j.wml.PPr ppr2 = wmlObjectFactory.createPPr();
ppr2.setJc(justification);
// SPACING
PPrBase.Spacing pprbase = wmlObjectFactory.createPPrBaseSpacing();
pprbase.setBefore(BigInteger.valueOf(0));
pprbase.setAfter(BigInteger.valueOf(0));
pprbase.setLine(BigInteger.valueOf(0));
pprbase.setLineRule(STLineSpacingRule.AT_LEAST);
ppr2.setSpacing(pprbase);
p2.setPPr(ppr2);
R r2 = wmlObjectFactory.createR();
p2.getContent().add(r2);
// Create object for rPr
RPr rpr2 = wmlObjectFactory.createRPr();
// // set font
// if (font > 30)
// font = 30;
HpsMeasure m = new HpsMeasure();
m.setVal(new BigInteger(font.toString()));
rpr2.setSz(m);
rpr2.setSzCs(m);
r2.setRPr(rpr2);
// Create object for lang
CTLanguage language3 = wmlObjectFactory.createCTLanguage();
language3.setVal("ar");
rpr2.setLang(language3);
rpr.setLang(language3);
Text text = null;
JAXBElement<org.docx4j.wml.Text> textWrapped = null;
for (int i = 0; i < lines.size(); i++) {
text = wmlObjectFactory.createText();
text.setValue(lines.get(i));
textWrapped = wmlObjectFactory.createRT(text);
r2.getContent().add(textWrapped);
r2.getContent().add(wmlObjectFactory.createBr());
}
// halamboha
shape.setStyle(
"position:absolute;font-size:3;margin-left: 0pt;margin-right: 0pt;margin-bottom: 0pt;margin-top: 0pt;border-style: none;width:"
+ boxWidth * .24 + "pt;height:" + boxHeight * .24 + "pt;top:" + top * .24 + "pt;left:"
+ left * .24 + "pt;");
// org.docx4j.wml.STBorder.NONE;
return p;
}
解决方案
我不明白您所说的“转移打击”是什么意思,但 Word 通常会这样写:
<v:shape id="Text Box 2" o:spid="_x0000_s1026" type="#_x0000_t202"
style="position:absolute;margin-left:0;margin-top:14.4pt;width:185.9pt;height:110.6pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:200;mso-wrap-distance-left:9pt;mso-wrap-distance-top:3.6pt;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:3.6pt;mso-position-horizontal:center;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:top" >
<v:textbox style="mso-fit-shape-to-text:t">
您需要进行试验以查看是否遗漏了重要内容,例如:mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;
推荐阅读
- java - FXML 导入静态嵌套类
- html - 在跨度中添加填充时,它给了我错误的结果
- kubernetes - 使用 yaml 文件向 minikube 公开服务
- c# - 将随机值保存到二维数组中
- kubernetes - Docker UCP 控制器因错误而关闭:不健康的 UCP 管理器:无法访问管理器:连接:连接被拒绝
- ios - 在 Swift 项目中为 Firebase 集成制定协议一致性
- replace - 替换sql数据库中的部分文本
- javascript - 向下滚动到该进度条时,如何使该进度条开始动画?
- activemq - ActiveMQ(NMS):有没有办法在队列上运行查询以找出所有具有特定标头值的消息?
- python - 为什么 Keras 在使用我的代码时会产生尺寸错误?