添加防止内部分页的内容

Add content that prevents page breaks inside

我使用 docx4j 将多个动态填充的子模板添加到我的主模板。
我不想在那些子模板中有分页符(除非整个页面对于一个页面来说都太小了)。
因此:如果一个 subTemplate 会破坏内部,我想将整个 subTemplate 移动到下一页。
我该怎么做?

到目前为止我的代码:

//... 
WordprocessingMLPackage mainTemplate = getWp();//ignore this method
List<WordprocessingMLPackage> projectTemplates = new ArrayList<>();

List<Project> projects = getProjects();//ignore this method
for (Project project : projects) {
  WordprocessingMLPackage template = getWpProject();//ignore this method
  //fill template with content from project
  //...
  projectList.add(template);
}

//Here's the part that will have to be changed I think:
//Since the projectTemplate only consists of tables I just added all its tables to the main template 
for (WordprocessingMLPackage temp : projectTemplates){
  List<Object> tables = doc.getAllElementFromObject(temp.getMainDocumentPart(), Tbl.class);
  for (Object table : tables) {
    mainTemplate.getMainDocumentPart().addObject(table);
  }
}

如果您能想出一种用 Word 更改 .docx 模板的方法来实现我的目标,请随时提出建议。
如果您对一般的代码改进有建议,请发表评论。

我做了这个 "workaround" 很适合我:
我将所有行数在一起并检查行内的文本是否中断(具有近似阈值)。
然后我将每个项目的行添加起来,一旦行太多,我就会在当前项目之前插入一个中断并重新开始。

final int maxRowCountPerPage = 44;
final int maxLettersPerLineInDescr = 55;
int totalRowCount = 0;

WordprocessingMLPackage mainTemplate = getWp();

//Iterate over projects
for (Project project : getProjects()) {
  WordprocessingMLPackage template = this.getWpProject();
  String projectDescription = project.getDescr();

  //Fill template...

  //Count the lines
  int rowsInProjectDescr = (int) Math.floor((double) projectDescription.length() / maxLettersPerLineInDescr);
  int projectRowCount = 0;
  List<Object> tables = doc.getAllElementFromObject(template.getMainDocumentPart(), Tbl.class);
  for (Object table : tables) {
    List<Object> rows = doc.getAllElementFromObject(table, Tr.class);
    int tableRowCount = rows.size();
    projectRowCount += tableRowCount;
  }
  //System.out.println("projectRowCount before desc:" + projectRowCount);
  projectRowCount += rowsInProjectDescr;
  //System.out.println("projectRowCount after desc:" + projectRowCount);
  totalRowCount += projectRowCount;
  //System.out.println("totalRowCount: " + totalRowCount);

  //Break page if too many lines for page
  if (totalRowCount > maxRowCountPerPage) {
    addPageBreak(wp);
    totalRowCount = projectRowCount;
  }
  //Add project template to main template
  for (Object table : tables) {
    mainTemplate.getMainDocumentPart().addObject(table);
  }
}

如果您发现让代码更漂亮的方法,请在评论中告诉我!