Working with Headers and Footers
Contents
[
Hide
]
How to Create Headers or Footers using DocumentBuilder
The following sample code demonstrates how to create headers/footers using DocumentBuilder.
Special attention is given to the following issues:
- How to specify the header/footer type.
- How to instruct the document to display different headers/footers for the first page and for odd/even pages.
- How to insert an absolutely positioned image into the header.
- How to set font and paragraph properties for the header/footer text.
- How to insert page numbers into the header/footer.
- How to use a table to make one part of the header/footer text-align to the left edge and the other to the right edge.
- How to control whether headers/footers of a subsequent section of the document use headers/footers defined in the previous section.
- How to ensure proper header/footer appearance when using different page orientation and size for subsequent sections.
The code example given below shows how to create headers footers using DocumentBuilder.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Section currentSection = builder.getCurrentSection(); | |
PageSetup pageSetup = currentSection.getPageSetup(); | |
// Specify if we want headers/footers of the first page to be different from other pages. | |
// You can also use PageSetup.OddAndEvenPagesHeaderFooter property to specify | |
// different headers/footers for odd and even pages. | |
pageSetup.setDifferentFirstPageHeaderFooter(true); | |
// --- Create header for the first page. --- | |
pageSetup.setHeaderDistance(20); | |
builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); | |
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); | |
// Set font properties for header text. | |
builder.getFont().setName("Arial"); | |
builder.getFont().setBold(true); | |
builder.getFont().setSize(14); | |
// Specify header title for the first page. | |
builder.write("Aspose.Words Header/Footer Creation Primer - Title Page."); | |
// --- Create header for pages other than first. --- | |
pageSetup.setHeaderDistance(20); | |
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); | |
// Insert absolutely positioned image into the top/left corner of the header. | |
// Distance from the top/left edges of the page is set to 10 points. | |
String imageFileName = dataDir + "Aspose.Words.gif"; | |
builder.insertImage(imageFileName, RelativeHorizontalPosition.PAGE, 10, RelativeVerticalPosition.PAGE, 10, 50, 50, WrapType.THROUGH); | |
builder.getParagraphFormat().setAlignment(ParagraphAlignment.RIGHT); | |
// Specify another header title for other pages. | |
builder.write("Aspose.Words Header/Footer Creation Primer."); | |
// --- Create footer for pages other than first. --- | |
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY); | |
// We use table with two cells to make one part of the text on the line (with page numbering) | |
// to be aligned left, and the other part of the text (with copyright) to be aligned right. | |
builder.startTable(); | |
// Clear table borders | |
builder.getCellFormat().clearFormatting(); | |
builder.insertCell(); | |
// Set first cell to 1/3 of the page width. | |
builder.getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(100 / 3)); | |
// Insert page numbering text here. | |
// It uses PAGE and NUMPAGES fields to auto calculate current page number and total number of pages. | |
builder.write("Page "); | |
builder.insertField("PAGE", ""); | |
builder.write(" of "); | |
builder.insertField("NUMPAGES", ""); | |
// Align this text to the left. | |
builder.getCurrentParagraph().getParagraphFormat().setAlignment(ParagraphAlignment.LEFT); | |
builder.insertCell(); | |
// Set the second cell to 2/3 of the page width. | |
builder.getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(100 * 2 / 3)); | |
builder.write("(C) 2001 Aspose Pty Ltd. All rights reserved."); | |
// Align this text to the right. | |
builder.getCurrentParagraph().getParagraphFormat().setAlignment(ParagraphAlignment.RIGHT); | |
builder.endRow(); | |
builder.endTable(); | |
builder.moveToDocumentEnd(); | |
// Make page break to create a second page on which the primary headers/footers will be seen. | |
builder.insertBreak(BreakType.PAGE_BREAK); | |
// Make section break to create a third page with different page orientation. | |
builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); | |
// Get the new section and its page setup. | |
currentSection = builder.getCurrentSection(); | |
pageSetup = currentSection.getPageSetup(); | |
// Set page orientation of the new section to landscape. | |
pageSetup.setOrientation(Orientation.LANDSCAPE); | |
// This section does not need different first page header/footer. | |
// We need only one title page in the document and the header/footer for this page | |
// has already been defined in the previous section | |
pageSetup.setDifferentFirstPageHeaderFooter(false); | |
// This section displays headers/footers from the previous section by default. | |
// Call currentSection.HeadersFooters.LinkToPrevious(false) to cancel this. | |
// Page width is different for the new section and therefore we need to set | |
// a different cell widths for a footer table. | |
currentSection.getHeadersFooters().linkToPrevious(false); | |
// If we want to use the already existing header/footer set for this section | |
// but with some minor modifications then it may be expedient to copy headers/footers | |
// from the previous section and apply the necessary modifications where we want them. | |
copyHeadersFootersFromPreviousSection(currentSection); | |
// Find the footer that we want to change. | |
HeaderFooter primaryFooter = currentSection.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_PRIMARY); | |
Row row = primaryFooter.getTables().get(0).getFirstRow(); | |
row.getFirstCell().getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(100 / 3)); | |
row.getLastCell().getCellFormat().setPreferredWidth(PreferredWidth.fromPercent(100 * 2 / 3)); | |
// Save the resulting document. | |
doc.save(dataDir + "HeaderFooter.Primer_Out.doc"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
/** | |
* Clones and copies headers/footers form the previous section to the specified section. | |
*/ | |
private static void copyHeadersFootersFromPreviousSection(Section section) throws Exception { | |
Section previousSection = (Section) section.getPreviousSibling(); | |
if (previousSection == null) | |
return; | |
section.getHeadersFooters().clear(); | |
for (HeaderFooter headerFooter : previousSection.getHeadersFooters()) | |
section.getHeadersFooters().add(headerFooter.deepClone(true)); | |
} |
Each section in a document can have up to three headers and up to three footers (for first, even and odd pages). If you want to delete all footers in a document you need to loop through all sections and remove every footer node.
How to Remove Footers and Leave Headers Intact
The code example given below deletes all footers from all sections, but leaves headers intact. You can download the template file of this example from here.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(dataDir + "HeaderFooter.RemoveFooters.doc"); | |
for (Section section : doc.getSections()) { | |
// Up to three different footers are possible in a section (for first, even and odd pages). | |
// We check and delete all of them. | |
HeaderFooter footer; | |
footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_FIRST); | |
if (footer != null) | |
footer.remove(); | |
// Primary footer is the footer used for odd pages. | |
footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_PRIMARY); | |
if (footer != null) | |
footer.remove(); | |
footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_EVEN); | |
if (footer != null) | |
footer.remove(); | |
} | |
doc.save(dataDir + "HeaderFooter.RemoveFooters Out.doc"); |