所以基本上我需要验证生成的.doc,当一些内容/元素段落或表传递给另一个页面时,如果某个元素/内容单独在另一个页面上,我需要采取另一个元素/内容并放置它与单独的元素/内容
public void investigarDoc(XWPFDocument doc){
try {
creacionDeFooter(doc);//FOOTER CREATION METHOD
XWPFParagraph cuerpoObservaciones = doc.createParagraph(); //PARAGRAPH 1
cuerpoObservaciones.setAlignment(ParagraphAlignment.DISTRIBUTE);
XWPFRun imprimeObservaciones = cuerpoObservaciones.createRun();
seccionObservaciones(doc,imprimeObservaciones,cuerpoObservaciones); //TABLE CREATION METHOD
XWPFParagraph cuerpoFirma = doc.createParagraph(); //PARAGRAPH 2
cuerpoFirma.setAlignment(ParagraphAlignment.CENTER);
XWPFRun imprimeFirma = cuerpoFirma.createRun();
seccionFirma(doc,imprimeFirma,cuerpoFirma); //SIGNATURE CREATION METHOD
doc.write(new FileOutputStream("C:\\test.doc"));
} catch (IOException iox) {
iox.printStackTrace();
System.out.println("Error: IOException Verificar Rutas de Archivos o Fotos!");
}
}
//页脚方法
public void creacionDeFooter(XWPFDocument doc){ //FOOTER METHOD
try {
CTP ctp = CTP.Factory.newInstance();
//this add page number incremental
ctp.addNewR().addNewPgNum();
XWPFParagraph parrafoFotter = new XWPFParagraph(ctp, doc);
XWPFParagraph[] paragraphs = new XWPFParagraph[1];
paragraphs[0] = parrafoFotter;
//position of number
parrafoFotter.setAlignment(ParagraphAlignment.RIGHT);
CTSectPr sectPr = doc.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(doc, sectPr);
headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, paragraphs);
} catch (IOException e) {
e.printStackTrace();
}
}
//第1段的方法
public void seccionObservaciones(XWPFDocument doc, XWPFRun otrasObservaciones,XWPFParagraph observaciones){ //TABLE METHOD
otrasObservaciones = observaciones.createRun();
otrasObservaciones.setText(".");
otrasObservaciones.addBreak();
//create table
XWPFTable table = doc.createTable();
//create first row
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("Otras Operaciones/Observaciones");
//create second row
XWPFTableRow tableRowTwo = table.createRow();
tableRowTwo.getCell(0).getTableRow();
tableRowTwo.getCell(0).setText("col fore, row fore");
}
//第2段的方法
public void seccionFirma(XWPFDocument doc, XWPFRun imprimeFirma,XWPFParagraph firma){ //SIGNATURE METHOD
imprimeFirma = firma.createRun();
imprimeFirma.addBreak();
imprimeFirma.setFontFamily("Arial");
imprimeFirma.addBreak();
imprimeFirma.setText("_________________________________________");
imprimeFirma.addBreak();
imprimeFirma.setText("NOMBRE PERSONA");
imprimeFirma.addBreak();
imprimeFirma.setText("PUESTO");
imprimeFirma.addBreak();
imprimeFirma.setText("GRUPO FINANCIERO BLABLA BLA");
imprimeFirma.setText(".");
}
这是最终结果的图片,这张照片都很好:
但问题是如果发生这样的事情:
这是大多数情况下验证的例子
我尝试在数字页面的基础上处理这个问题,但似乎poi不存储页面数。
我需要比桌子和签名段落来到另一页,如果其中一些2在新页面上。
我将非常感激,非常感谢!问候。
答案 0 :(得分:2)
好像你想把一行上的行和段落放在一起。这可以通过Word
查看https://support.office.com/en-us/article/Keep-text-together-af94e5b8-3a5a-4cb0-9c53-dea56b43d96d。
因此,我们必须为每个段落设置属性KeepLines
和KeepNext
。也适用于表内的人。
粗糙的线条是我的补充。
public void seccionObservaciones(XWPFDocument doc, XWPFRun otrasObservaciones, XWPFParagraph observaciones){ //TABLE METHOD
otrasObservaciones = observaciones.createRun();
otrasObservaciones.setText(".");
otrasObservaciones.addBreak();
//create table
XWPFTable table = doc.createTable();
//create first row
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("Otras Operaciones/Observaciones");
for (XWPFParagraph p : tableRowOne.getCell(0).getParagraphs()) {
p.getCTP().addNewPPr().addNewKeepLines().setVal(STOnOff.ON);
p.getCTP().getPPr().addNewKeepNext().setVal(STOnOff.ON);
}
//create second row
XWPFTableRow tableRowTwo = table.createRow();
tableRowTwo.getCell(0).getTableRow();
tableRowTwo.getCell(0).setText("col fore, row fore");
for (XWPFParagraph p : tableRowTwo.getCell(0).getParagraphs()) {
p.getCTP().addNewPPr().addNewKeepLines().setVal(STOnOff.ON);
p.getCTP().getPPr().addNewKeepNext().setVal(STOnOff.ON);
}
}
//主要方法
...
creacionDeFooter(doc);//FOOTER CREATION METHOD
XWPFParagraph cuerpoObservaciones = doc.createParagraph(); //PARAGRAPH 1
cuerpoObservaciones.setAlignment(ParagraphAlignment.DISTRIBUTE);
cuerpoObservaciones.getCTP().getPPr().addNewKeepLines().setVal(STOnOff.ON); //has already a CPPr through setAlignment
cuerpoObservaciones.getCTP().getPPr().addNewKeepNext().setVal(STOnOff.ON);
XWPFRun imprimeObservaciones = cuerpoObservaciones.createRun();
seccionObservaciones(doc,imprimeObservaciones,cuerpoObservaciones); //TABLE CREATION METHOD
XWPFParagraph cuerpoFirma = doc.createParagraph(); //PARAGRAPH 2
cuerpoFirma.getCTP().addNewPPr().addNewKeepLines().setVal(STOnOff.ON);
cuerpoFirma.getCTP().getPPr().addNewKeepNext().setVal(STOnOff.ON);
cuerpoFirma.setAlignment(ParagraphAlignment.CENTER);
XWPFRun imprimeFirma = cuerpoFirma.createRun();
seccionFirma(doc,imprimeFirma,cuerpoFirma); //SIGNATURE CREATION METHOD
doc.write(new FileOutputStream("test.docx"));
...
org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff
需要 STOnOff.ON
。但是你已经使用了其他org.openxmlformats.schemas.wordprocessingml.x2006.main.
个对象了。所以你会知道怎么做到这一点。
修改强>
忘了提。请不要将XWPFDocument
保存为*.doc
文件。 *.doc
文件主要用于Word
到版本2003的二进制文件格式。XWPFDocument
基于XML
,应保存为*.docx
。< / p>