[英]How to center a paragraph vertically in Apache POI Java?
我目前正在構建一個字格式化工具,但在使用 Apache POI 時遇到了一些問題。
我正在使用 org.apache.poi 版本 5.2.0
看看這張照片:
我需要它水平和垂直居中。
目前它只是水平居中而不是垂直居中。
我不知道為什么。 這是我正在使用的代碼:
for (XWPFParagraph p : docx.getParagraphs()) {
System.out.println(p.getText());
boolean setBold = false;
boolean setItalic = false;
int fontSizeToSet = 16;
if (counter == 0) {
p.setAlignment(ParagraphAlignment.CENTER);
p.setVerticalAlignment(TextAlignment.CENTER);
}
if (counter == 1) {
p.setPageBreak(true);
}
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
for (XWPFRun r : runs) {
if (counter == 0) {
r.setFontSize(14);
r.setBold(true);
r.setFontFamily("Bookman Old Style");
}
}
}
counter++;
}
我究竟做錯了什么?
XWPFParagraph.setVerticalAlignment不適用於垂直對齊頁面上的段落。 它在文本行中設置垂直 alignment。 這類似於vertical-align
在 CSS 中的作用。它僅在文本行高於該行中的單個元素時才生效。 例如,如果在一個文本行中存在具有各種字體大小的文本。
TextAlignment具有以下枚舉常量:
AUTO
指定父 object 中的所有文本在顯示時應自動對齊。
BASELINE
指定父 object 中的所有文本在顯示時應與每個字符的基線對齊。
BOTTOM
指定父 object 中的所有文本在顯示時應與每個字符的底部對齊。
CENTER
指定父 object 中的所有文本在顯示時應與每個字符的中心對齊。
TOP
指定父 object 中的所有文本在顯示時應與每個字符的頂部對齊。
以下完整代碼示例顯示了不同文本 alignment 設置的效果。
要在頁面上垂直居中放置一個(或多個)段落,這些段落必須位於單個頁面上。 並且必須為此頁面設置部分屬性。 在部分屬性中,然后可以為上面的部分設置VAlign
。
不幸的是, apche poi
到目前為止還沒有提供設置部分屬性。 因此必須使用低級org.openxmlformats.schemas.wordprocessingml.x2006.main.*
類來實現相同的目的。
下面的完整示例也顯示了這一點。 它在上一節的下一頁放置一個帶有分節符的段落。 所以第一段在它自己的頁面上。 然后它將頁面垂直對齊設置為上面頁面的中心(上面的部分)。
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.*;
public class CreateWordParagraphAndPageAlignment {
static void createSomeRichTextContent(XWPFParagraph paragraph) {
XWPFRun run = paragraph.createRun();
run.setText("Aligned ");
run.setFontSize(11);
run = paragraph.createRun();
run.setText("paragraph ");
run.setFontSize(22);
run = paragraph.createRun();
run.setText("having ");
run.setFontSize(33);
run = paragraph.createRun();
run.setText("various ");
run.setFontSize(22);
run = paragraph.createRun();
run.setText("font sizes");
run.setFontSize(11);
}
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Default paragraph in first page, which has page vertical alignment set.");
run.setFontSize(44);
paragraph = document.createParagraph();
//paragraph with section break next page for section above
paragraph = document.createParagraph();
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr ctSectPr = paragraph.getCTP().addNewPPr().addNewSectPr();
ctSectPr.addNewType().setVal(org.openxmlformats.schemas.wordprocessingml.x2006.main.STSectionMark.NEXT_PAGE);
//set page vertical align center for page above (section above)
ctSectPr.addNewVAlign().setVal(org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc.CENTER);
//page size setting (A4) for the section above
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageSz ctPageSz = ctSectPr.addNewPgSz();
ctPageSz.setW(java.math.BigInteger.valueOf(Math.round(8.27d*72d*20d))); //A4 = 8.27" * 72 * 20 = Twips
ctPageSz.setH(java.math.BigInteger.valueOf(Math.round(11.69d*72d*20d))); //A4 = 11.69" * 72 * 20 = Twips
paragraph = document.createParagraph();
run = paragraph.createRun();
run.setText("Default paragraph");
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.AUTO);
createSomeRichTextContent(paragraph);
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.BASELINE);
createSomeRichTextContent(paragraph);
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.BOTTOM);
createSomeRichTextContent(paragraph);
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
createSomeRichTextContent(paragraph);
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.TOP);
createSomeRichTextContent(paragraph);
paragraph = document.createParagraph();
// page size setting (A4) for the last section above must be at last in body
ctSectPr = document.getDocument().getBody().addNewSectPr();
ctPageSz = ctSectPr.addNewPgSz();
ctPageSz.setW(java.math.BigInteger.valueOf(Math.round(8.27d*72d*20d))); //A4 = 8.27" * 72 * 20 = Twips
ctPageSz.setH(java.math.BigInteger.valueOf(Math.round(11.69d*72d*20d))); //A4 = 11.69" * 72 * 20 = Twips
FileOutputStream out = new FileOutputStream("./CreateWordParagraphAndPageAlignment.docx");
document.write(out);
out.close();
document.close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.