Java源码示例:org.docx4j.wml.SectPr
示例1
private SectPr createSectPr() throws Exception {
String openXML = "<w:sectPr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">"
// Word adds the background image in each of 3 header parts
+ "<w:headerReference r:id=\"" + createHeaderPart("even").getId() + "\" w:type=\"even\"/>"
+ "<w:headerReference r:id=\"" + createHeaderPart("default").getId() + "\" w:type=\"default\"/>"
+ "<w:headerReference r:id=\"" + createHeaderPart("first").getId() + "\" w:type=\"first\"/>"
// Word adds empty footer parts when you create a watermark, but its not necessary
// + "<w:footerReference r:id=\"rId9\" w:type=\"even\"/>"
// + "<w:footerReference r:id=\"rId10\" w:type=\"default\"/>"
// + "<w:footerReference r:id=\"rId12\" w:type=\"first\"/>"
+ "<w:pgSz w:h=\"15840\" w:w=\"12240\"/>"
+ "<w:pgMar w:bottom=\"1440\" w:footer=\"708\" w:gutter=\"0\" w:header=\"708\" w:left=\"1440\" w:right=\"1440\" w:top=\"1440\"/>"
+ "<w:cols w:space=\"708\"/>"
+ "<w:docGrid w:linePitch=\"360\"/>"
+"</w:sectPr>";
return (SectPr)XmlUtils.unmarshalString(openXML);
}
示例2
/**
* @Description: 设置页面边框
*/
public static void setDocumentBorders(WordprocessingMLPackage wordPackage, ObjectFactory factory, CTBorder top,
CTBorder right, CTBorder bottom, CTBorder left) {
SectPr sectPr = getDocSectPr(wordPackage);
PgBorders pgBorders = sectPr.getPgBorders();
if (pgBorders == null) {
pgBorders = factory.createSectPrPgBorders();
sectPr.setPgBorders(pgBorders);
}
if (top != null) {
pgBorders.setTop(top);
}
if (right != null) {
pgBorders.setRight(right);
}
if (bottom != null) {
pgBorders.setBottom(bottom);
}
if (left != null) {
pgBorders.setLeft(left);
}
}
示例3
/**
* @Description: 设置页面大小及纸张方向 landscape横向
*/
public static void setDocumentSize(WordprocessingMLPackage wordPackage, ObjectFactory factory, String width, String height,
STPageOrientation stValue) {
SectPr sectPr = getDocSectPr(wordPackage);
PgSz pgSz = sectPr.getPgSz();
if (pgSz == null) {
pgSz = factory.createSectPrPgSz();
sectPr.setPgSz(pgSz);
}
if (StringUtils.isNotBlank(width)) {
pgSz.setW(new BigInteger(width));
}
if (StringUtils.isNotBlank(height)) {
pgSz.setH(new BigInteger(height));
}
if (stValue != null) {
pgSz.setOrient(stValue);
}
}
示例4
/**
* @Description:设置页边距
*/
public static void setDocMarginSpace(WordprocessingMLPackage wordPackage, ObjectFactory factory, String top, String left,
String bottom, String right) {
SectPr sectPr = getDocSectPr(wordPackage);
PgMar pg = sectPr.getPgMar();
if (pg == null) {
pg = factory.createSectPrPgMar();
sectPr.setPgMar(pg);
}
if (StringUtils.isNotBlank(top)) {
pg.setTop(new BigInteger(top));
}
if (StringUtils.isNotBlank(bottom)) {
pg.setBottom(new BigInteger(bottom));
}
if (StringUtils.isNotBlank(left)) {
pg.setLeft(new BigInteger(left));
}
if (StringUtils.isNotBlank(right)) {
pg.setRight(new BigInteger(right));
}
}
示例5
/**
* @Description: 设置行号
* @param distance
* :距正文距离 1厘米=567
* @param start
* :起始编号(0开始)
* @param countBy
* :行号间隔
* @param restartType
* :STLineNumberRestart.CONTINUOUS(continuous连续编号)<br/>
* STLineNumberRestart.NEW_PAGE(每页重新编号)<br/>
* STLineNumberRestart.NEW_SECTION(每节重新编号)
*/
public static void setDocInNumType(WordprocessingMLPackage wordPackage, String countBy, String distance, String start,
STLineNumberRestart restartType) {
SectPr sectPr = getDocSectPr(wordPackage);
CTLineNumber lnNumType = sectPr.getLnNumType();
if (lnNumType == null) {
lnNumType = new CTLineNumber();
sectPr.setLnNumType(lnNumType);
}
if (StringUtils.isNotBlank(countBy)) {
lnNumType.setCountBy(new BigInteger(countBy));
}
if (StringUtils.isNotBlank(distance)) {
lnNumType.setDistance(new BigInteger(distance));
}
if (StringUtils.isNotBlank(start)) {
lnNumType.setStart(new BigInteger(start));
}
if (restartType != null) {
lnNumType.setRestart(restartType);
}
}
示例6
/**
* @Description: 设置页面边框
*/
public void setDocumentBorders(WordprocessingMLPackage wordPackage,
ObjectFactory factory, CTBorder top, CTBorder right,
CTBorder bottom, CTBorder left) {
SectPr sectPr = getDocSectPr(wordPackage);
PgBorders pgBorders = sectPr.getPgBorders();
if (pgBorders == null) {
pgBorders = factory.createSectPrPgBorders();
sectPr.setPgBorders(pgBorders);
}
if (top != null) {
pgBorders.setTop(top);
}
if (right != null) {
pgBorders.setRight(right);
}
if (bottom != null) {
pgBorders.setBottom(bottom);
}
if (left != null) {
pgBorders.setLeft(left);
}
}
示例7
/**
* @Description: 设置页面大小及纸张方向 landscape横向
*/
public void setDocumentSize(WordprocessingMLPackage wordPackage,
ObjectFactory factory, String width, String height,
STPageOrientation stValue) {
SectPr sectPr = getDocSectPr(wordPackage);
PgSz pgSz = sectPr.getPgSz();
if (pgSz == null) {
pgSz = factory.createSectPrPgSz();
sectPr.setPgSz(pgSz);
}
if (StringUtils.isNotBlank(width)) {
pgSz.setW(new BigInteger(width));
}
if (StringUtils.isNotBlank(height)) {
pgSz.setH(new BigInteger(height));
}
if (stValue != null) {
pgSz.setOrient(stValue);
}
}
示例8
/**
* @Description:设置页边距
*/
public void setDocMarginSpace(WordprocessingMLPackage wordPackage,
ObjectFactory factory, String top, String left, String bottom,
String right) {
SectPr sectPr = getDocSectPr(wordPackage);
PgMar pg = sectPr.getPgMar();
if (pg == null) {
pg = factory.createSectPrPgMar();
sectPr.setPgMar(pg);
}
if (StringUtils.isNotBlank(top)) {
pg.setTop(new BigInteger(top));
}
if (StringUtils.isNotBlank(bottom)) {
pg.setBottom(new BigInteger(bottom));
}
if (StringUtils.isNotBlank(left)) {
pg.setLeft(new BigInteger(left));
}
if (StringUtils.isNotBlank(right)) {
pg.setRight(new BigInteger(right));
}
}
示例9
/**
* @Description: 设置行号
* @param distance
* :距正文距离 1厘米=567
* @param start
* :起始编号(0开始)
* @param countBy
* :行号间隔
* @param restartType
* :STLineNumberRestart.CONTINUOUS(continuous连续编号)<br/>
* STLineNumberRestart.NEW_PAGE(每页重新编号)<br/>
* STLineNumberRestart.NEW_SECTION(每节重新编号)
*/
public void setDocInNumType(WordprocessingMLPackage wordPackage,
String countBy, String distance, String start,
STLineNumberRestart restartType) {
SectPr sectPr = getDocSectPr(wordPackage);
CTLineNumber lnNumType = sectPr.getLnNumType();
if (lnNumType == null) {
lnNumType = new CTLineNumber();
sectPr.setLnNumType(lnNumType);
}
if (StringUtils.isNotBlank(countBy)) {
lnNumType.setCountBy(new BigInteger(countBy));
}
if (StringUtils.isNotBlank(distance)) {
lnNumType.setDistance(new BigInteger(distance));
}
if (StringUtils.isNotBlank(start)) {
lnNumType.setStart(new BigInteger(start));
}
if (restartType != null) {
lnNumType.setRestart(restartType);
}
}
示例10
public void createHeaderReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
HeaderReference headerReference = factory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
}
示例11
public void createFooterReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
FooterReference footerReference = factory.createFooterReference();
footerReference.setId(relationship.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(footerReference);
}
示例12
/**
* First we retrieve the document sections from the package. As we want to add
* a footer, we get the last section and take the section properties from it.
* The section is always present, but it might not have properties, so we check
* if they exist to see if we should create them. If they need to be created,
* we do and add them to the main document part and the section.
* Then we create a reference to the footer, give it the id of the relationship,
* set the type to header/footer reference and add it to the collection of
* references to headers and footers in the section properties.
*
* @param relationship
*/
private static void createFooterReference(Relationship relationship) {
List<SectionWrapper> sections = wordMLPackage.getDocumentModel().getSections();
SectPr sectionProperties = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectionProperties==null ) {
sectionProperties = factory.createSectPr();
wordMLPackage.getMainDocumentPart().addObject(sectionProperties);
sections.get(sections.size() - 1).setSectPr(sectionProperties);
}
FooterReference footerReference = factory.createFooterReference();
footerReference.setId(relationship.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectionProperties.getEGHdrFtrReferences().add(footerReference);
}
示例13
public void createHeaderReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
HeaderReference headerReference = factory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
}
示例14
public void createFooterReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
FooterReference footerReference = factory.createFooterReference();
footerReference.setId(relationship.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(footerReference);
}
示例15
public void setPageMargins(WordprocessingMLPackage wordMLPackage,
ObjectFactory factory) {
try {
Body body = wordMLPackage.getMainDocumentPart().getContents()
.getBody();
PageDimensions page = new PageDimensions();
PgMar pgMar = page.getPgMar();
pgMar.setBottom(BigInteger.valueOf(pixelsToDxa(50)));
pgMar.setTop(BigInteger.valueOf(pixelsToDxa(50)));
pgMar.setLeft(BigInteger.valueOf(pixelsToDxa(50)));
pgMar.setRight(BigInteger.valueOf(pixelsToDxa(50)));
SectPr sectPr = factory.createSectPr();
body.setSectPr(sectPr);
sectPr.setPgMar(pgMar);
} catch (Exception e) {
e.printStackTrace();
}
}
示例16
/**
* This method fetches the document final section properties, and adds a newly
* created footer reference to them.
*
* @param relationship
*/
public static void createFooterReference(Relationship relationship){
List<SectionWrapper> sections =
wordMLPackage.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr==null ) {
sectPr = factory.createSectPr();
wordMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
FooterReference footerReference = factory.createFooterReference();
footerReference.setId(relationship.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(footerReference);
}
示例17
public void createHeaderReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
HeaderReference headerReference = factory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);
}
示例18
public void createFooterReference(
WordprocessingMLPackage wordprocessingMLPackage,
MainDocumentPart t, ObjectFactory factory, Relationship relationship)
throws InvalidFormatException {
List<SectionWrapper> sections = wordprocessingMLPackage
.getDocumentModel().getSections();
SectPr sectPr = sections.get(sections.size() - 1).getSectPr();
// There is always a section wrapper, but it might not contain a sectPr
if (sectPr == null) {
sectPr = factory.createSectPr();
t.addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
FooterReference footerReference = factory.createFooterReference();
footerReference.setId(relationship.getId());
footerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(footerReference);
}
示例19
private SectPr createSectPr() throws JAXBException, Docx4JException, IOException {
String openXML = "<w:sectPr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">"
// Word adds the background image in each of 3 header parts
+ "<w:headerReference r:id=\"" + createHeaderPart("even").getId() + "\" w:type=\"even\"/>"
+ "<w:headerReference r:id=\"" + createHeaderPart("default").getId() + "\" w:type=\"default\"/>"
+ "<w:headerReference r:id=\"" + createHeaderPart("first").getId() + "\" w:type=\"first\"/>"
+ "<w:pgSz w:h=\"15840\" w:w=\"12240\"/>"
+ "<w:pgMar w:bottom=\"1440\" w:footer=\"708\" w:gutter=\"0\" w:header=\"708\" w:left=\"1440\" w:right=\"1440\" w:top=\"1440\"/>"
+ "<w:cols w:space=\"708\"/>"
+ "<w:docGrid w:linePitch=\"360\"/>"
+"</w:sectPr>";
return (SectPr)XmlUtils.unmarshalString(openXML);
}
示例20
/**
* @Description: 设置分节符 nextPage:下一页 continuous:连续 evenPage:偶数页 oddPage:奇数页
*/
public static void setDocSectionBreak(WordprocessingMLPackage wordPackage, String sectValType) {
if (StringUtils.isNotBlank(sectValType)) {
SectPr sectPr = getDocSectPr(wordPackage);
Type sectType = sectPr.getType();
if (sectType == null) {
sectType = new Type();
sectPr.setType(sectType);
}
sectType.setVal(sectValType);
}
}
示例21
/**
* @Description:设置文字方向 tbRl 垂直
*/
public static void setDocTextDirection(WordprocessingMLPackage wordPackage, String textDirection) {
if (StringUtils.isNotBlank(textDirection)) {
SectPr sectPr = getDocSectPr(wordPackage);
TextDirection textDir = sectPr.getTextDirection();
if (textDir == null) {
textDir = new TextDirection();
sectPr.setTextDirection(textDir);
}
textDir.setVal(textDirection);
}
}
示例22
/**
* @Description:设置word 垂直对齐方式(Word默认方式都是"顶端对齐")
*/
public static void setDocVAlign(WordprocessingMLPackage wordPackage, STVerticalJc valignType) {
if (valignType != null) {
SectPr sectPr = getDocSectPr(wordPackage);
CTVerticalJc valign = sectPr.getVAlign();
if (valign == null) {
valign = new CTVerticalJc();
sectPr.setVAlign(valign);
}
valign.setVal(valignType);
}
}
示例23
/**
* @Description: 设置分节符 nextPage:下一页 continuous:连续 evenPage:偶数页 oddPage:奇数页
*/
public void setDocSectionBreak(WordprocessingMLPackage wordPackage,
String sectValType) {
if (StringUtils.isNotBlank(sectValType)) {
SectPr sectPr = getDocSectPr(wordPackage);
Type sectType = sectPr.getType();
if (sectType == null) {
sectType = new Type();
sectPr.setType(sectType);
}
sectType.setVal(sectValType);
}
}
示例24
/**
* @Description:设置文字方向 tbRl 垂直
*/
public void setDocTextDirection(WordprocessingMLPackage wordPackage,
String textDirection) {
if (StringUtils.isNotBlank(textDirection)) {
SectPr sectPr = getDocSectPr(wordPackage);
TextDirection textDir = sectPr.getTextDirection();
if (textDir == null) {
textDir = new TextDirection();
sectPr.setTextDirection(textDir);
}
textDir.setVal(textDirection);
}
}
示例25
/**
* @Description:设置word 垂直对齐方式(Word默认方式都是"顶端对齐")
*/
public void setDocVAlign(WordprocessingMLPackage wordPackage,
STVerticalJc valignType) {
if (valignType != null) {
SectPr sectPr = getDocSectPr(wordPackage);
CTVerticalJc valign = sectPr.getVAlign();
if (valign == null) {
valign = new CTVerticalJc();
sectPr.setVAlign(valign);
}
valign.setVal(valignType);
}
}
示例26
public static SectPr getDocSectPr(WordprocessingMLPackage wordPackage) {
SectPr sectPr = wordPackage.getDocumentModel().getSections().get(0).getSectPr();
return sectPr;
}
示例27
public SectPr getDocSectPr(WordprocessingMLPackage wordPackage) {
SectPr sectPr = wordPackage.getDocumentModel().getSections().get(0)
.getSectPr();
return sectPr;
}
示例28
public void testDocx4jSetPageSize() throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
String titleStr="静夜思 李白";
String str="床前明月光,疑似地上霜。";
String str2="举头望明月,低头思故乡。";
P p = Docx4j_Helper.factory.createP();
String rprStr = "<w:rPr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:rFonts w:hint=\"eastAsia\" w:ascii=\"Times New Roman\" w:hAnsi=\"Times New Roman\" w:eastAsia=\"宋体\"/><w:b/><w:color w:val=\"333333\"/><w:sz w:val=\"32\"/><w:szCs w:val=\"32\"/></w:rPr>";
RPr rpr = (RPr) XmlUtils.unmarshalString(rprStr);
setParagraphContent(p, rpr,titleStr);
mdp.addObject(p);
p = Docx4j_Helper.factory.createP();
setParagraphContent(p, rpr,str);
mdp.addObject(p);
p = Docx4j_Helper.factory.createP();
PPr pPr=Docx4j_Helper.factory.createPPr();
//设置文字方向
SectPr sectPr = Docx4j_Helper.factory.createSectPr();
TextDirection textDirect = Docx4j_Helper.factory.createTextDirection();
//文字方向:垂直方向从右往左
textDirect.setVal("tbRl");
sectPr.setTextDirection(textDirect);
Type sectType = Docx4j_Helper.factory.createSectPrType();
//下一页
sectType.setVal("nextPage");
sectPr.setType(sectType);
//设置页面大小
PgSz pgSz = Docx4j_Helper.factory.createSectPrPgSz();
pgSz.setW(new BigInteger("8335"));
pgSz.setH(new BigInteger("11850"));
sectPr.setPgSz(pgSz);
pPr.setSectPr(sectPr);
p.setPPr(pPr);
setParagraphContent(p, rpr,str2);
mdp.addObject(p);
p = createParagraphWithHAlign();
setParagraphContent(p, rpr,titleStr);
mdp.addObject(p);
p = createParagraphWithHAlign();
setParagraphContent(p, rpr,str);
mdp.addObject(p);
p = createParagraphWithHAlign();
setParagraphContent(p, rpr,str2);
mdp.addObject(p);
// Docx4j_Helper.saveWordPackage(wordMLPackage, outputfilepath);
}
示例29
/**
* FOP inserts a blank page if necessary so that a section with page numbering
* from 1 would be face up when printed double sided. Word doesn't do that
* (unless you have an odd section type), so this function mimics Word's
* behaviour.
*
* @param context
* @return
* @since 3.2.2
*/
public static String getForcePageCount(FOConversionContext context) {
// see http://www.w3.org/TR/xsl/#force-page-count
ConversionSectionWrapper wrapper = context.getSections().peekNextSection();
if (wrapper==null) {
// final section
return "no-force";
} else {
SectPr.Type secType = wrapper.getSectPr().getType();
CTPageNumber pgNumType = wrapper.getSectPr().getPgNumType();
Boolean isExplicitOdd = null; // null means numbering will continue from the highest page number in the previous section
if (pgNumType!=null && pgNumType.getStart()!=null) {
int start = pgNumType.getStart().intValue();
if ( start % 2 == 0) {
isExplicitOdd = Boolean.FALSE;
} else {
isExplicitOdd = Boolean.TRUE;
}
}
if (secType==null || secType.getVal().equals("nextPage") ) {
return "no-force";
} else if (isExplicitOdd==null // LIMITATION: We don't get this right after the user has set the page number explicitly in a previous section
|| isExplicitOdd) {
// The normal case
if ( secType.getVal().equals("evenPage") ) {
// Even page section breaks, which begin the new section on the next even-numbered page.
// (What happens if that section has w:pgNumType/@w:start="1"?)
return "end-on-odd";
} else if ( secType.getVal().equals("oddPage") ) {
// Odd page section breaks, which begin the new section on the next odd-numbered page
return "end-on-even";
} else {
// continuous (!)
return "no-force";
}
} else {
// section starts with p2 or p4
if ( secType.getVal().equals("evenPage") ) {
// Even page section breaks, which begin the new section on the next even-numbered page.
// (What happens if that section has w:pgNumType/@w:start="1"?)
return "end-on-even";
} else if ( secType.getVal().equals("oddPage") ) {
// Odd page section breaks, which begin the new section on the next odd-numbered page
return "end-on-odd";
} else {
// continuous (!)
return "no-force";
}
}
}
}
示例30
/**
* Since we start with headers/footers which each take up approx half the page,
* there is little room for the body content (which would result in many pages,
* and unnecessary processing).
*
* At the same time, we need enough body content to produce first page, odd page,
* and even page for each section.
*
* So this method replaces the existing body content with content which is sufficient
* for our needs. This method isn't essential, but it should make things faster.
*
* It leaves the headers/footers untouched, since it is those which we're
* most interested in at this point.
*
* @param hfPkg
*/
static void trimContent(WordprocessingMLPackage hfPkg) {
// Find the sectPrs
SectPrFinder sf = new SectPrFinder(hfPkg.getMainDocumentPart());
try {
new TraversalUtil(hfPkg.getMainDocumentPart().getContents(), sf);
} catch (Docx4JException e) {
// TODO Auto-generated catch block
log.error(e.getMessage(), e);
}
List<SectPr> sectPrList = sf.getSectPrList();
// Was there a body level one?
if (hfPkg.getMainDocumentPart().getJaxbElement().getBody().getSectPr()!=null) {
//then delete the first entry (which is where SectPrFinder put it)
sectPrList.remove(0);
}
// Now generate content; let's use
P filler = createFillerP();
List<Object> contents = hfPkg.getMainDocumentPart().getContent();
contents.clear();
for (SectPr sectPr : sectPrList) {
contents.add(filler);
contents.add(filler);
contents.add(filler);
contents.add(filler);
// We expect to cause, in due course, something like:
// WARN org.apache.fop.apps.FOUserAgent .processEvent line 97 -
// The contents of fo:region-body on page 6 exceed its viewport
// by 29068 millipoints. (See position 1:1038)
// now add the sectPr
P p = Context.getWmlObjectFactory().createP();
PPr ppr = Context.getWmlObjectFactory().createPPr();
p.setPPr(ppr);
ppr.setSectPr(sectPr);
contents.add(p);
}
// Add content before the body level sectPr
if (hfPkg.getMainDocumentPart().getJaxbElement().getBody().getSectPr()!=null) {
contents.add(filler);
contents.add(filler);
contents.add(filler);
contents.add(filler);
}
}