我想通过Word文档中的Apache-POI设置标签大小。
我有一个标头,应在标头行中包含两个字段,如下所示:
| filed1 -> field2 |
垂直线代表页面的边缘。 我希望两个字段之间的选项卡都大,以便第一个字段左对齐页面,而右字段右对齐页面。
使用Word本身很容易,但是我只发现了如何使用POI添加标签,而不是如何设置标签的宽度。
我尝试使用Apaches tika工具调查Word文件,但没有看到选项卡大小埋在文件中的位置。
任何帮助表示赞赏, 梅克
答案 0 :(得分:1)
制表位是Word段落中的设置。而且尽管使用制表位是很常见的事情,而且是文字处理中非常老的过程,但是如果不使用apache poi
的底层底层ooxml-schema对象,就不可能实现。
示例:
注意:制表位pos的测量单位是缇(十分之一英寸)。
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc;
import java.math.BigInteger;
public class CreateWordHeaderWithTabStops {
public static void main(String[] args) throws Exception {
XWPFDocument doc = new XWPFDocument();
// the body content
XWPFParagraph paragraph = doc.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("The Body...");
// create header
XWPFHeader header = doc.createHeader(HeaderFooterType.FIRST);
// header's first paragraph
paragraph = header.getParagraphArray(0);
if (paragraph == null) paragraph = header.createParagraph();
paragraph.setAlignment(ParagraphAlignment.LEFT);
// create tab stops
int twipsPerInch = 1440; //measurement unit for tab stop pos is twips (twentieth of an inch point)
CTTabStop tabStop = paragraph.getCTP().getPPr().addNewTabs().addNewTab();
tabStop.setVal(STTabJc.CENTER);
tabStop.setPos(BigInteger.valueOf(3 * twipsPerInch));
tabStop = paragraph.getCTP().getPPr().getTabs().addNewTab();
tabStop.setVal(STTabJc.RIGHT);
tabStop.setPos(BigInteger.valueOf(6 * twipsPerInch));
// first run in header's first paragraph, to be for first text box
run = paragraph.createRun();
run.setText("Left");
// add tab to run
run.addTab();
run = paragraph.createRun();
run.setText("Center");
// add tab to run
run.addTab();
run = paragraph.createRun();
run.setText("Right");
FileOutputStream out = new FileOutputStream("CreateWordHeaderWithTabStops.docx");
doc.write(out);
doc.close();
out.close();
}
}