The easiest way I would fin is you will need to create a custom JAR file since javascript does not allow you to properly extend other classes. I will give examples of the java file I used to create the JAR file as well as the javascript I used im my channel. I created the java file in Eclipse and exported it to a JAR then imported it into Qvera.
Here is a snippet of the java code I used im my custom JAR file:
package com.itextpdf.header;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;
public class HeaderFooter extends PdfPageEventHelper {
Paragraph header;
Paragraph footer;
/** The template with the total number of pages. */
PdfTemplate total;
Font font1 = new Font(FontFamily.TIMES_ROMAN, 11f);
Font font2 = new Font(FontFamily.TIMES_ROMAN, 11f, Font.BOLD);
Font font3 = new Font(FontFamily.TIMES_ROMAN, 10.5f);
Font font4 = new Font(FontFamily.TIMES_ROMAN, 10.5f, Font.BOLD);
Font font5 = new Font(FontFamily.TIMES_ROMAN, 7f);
Font font6 = new Font(FontFamily.TIMES_ROMAN, 7f, Font.BOLD);
/**
* Allows us to change the content of the header.
* @param header The new header String
*/
public void setHeader(Paragraph header) {
this.header = header;
}
public void setFooter(Paragraph footer) {
this.footer = footer;
}
/**
* Creates the PdfTemplate that will hold the total number of pages.
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(
* com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
*/
public void onOpenDocument(PdfWriter writer, Document document) {
total = writer.getDirectContent().createTemplate(30, 16);
}
/**
* Adds a header to every page
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
* com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
*/
public void onEndPage(PdfWriter writer, Document document) {
PdfPTable tblheader = new PdfPTable(1);
PdfPTable tblfooter = new PdfPTable(1);
try {
tblheader.setWidths(new int[]{24});
tblheader.setTotalWidth(150);
tblheader.setLockedWidth(true);
tblheader.getDefaultCell().setFixedHeight(130);
tblheader.getDefaultCell().setLeading(0, 1.1f);
tblheader.getDefaultCell().setBorder(Rectangle.BOTTOM);
tblheader.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
tblheader.addCell(header1);
tblheader.writeSelectedRows(0, -1, 10, tblheader.getTotalHeight() + 590, writer.getDirectContent());
tblfooter.setWidths(new int[]{24});
tblfooter.setTotalWidth(590);
tblfooter.setLockedWidth(true);
tblfooter.getDefaultCell().setFixedHeight(40);
tblfooter.getDefaultCell().setLeading(0, 1.2f);
tblfooter.getDefaultCell().setBorder(Rectangle.TOP);
tblfooter.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
tblfooter.addCell(footer);
tblfooter.writeSelectedRows(0, -1, 10, tblfooter.getTotalHeight() + 70, writer.getDirectContent());
tblpages.setWidths(new int[]{103, 97});
tblpages.setTotalWidth(590);
tblpages.setLockedWidth(true);
tblpages.getDefaultCell().setFixedHeight(20);
tblpages.getDefaultCell().setBorder(Rectangle.TOP);
tblpages.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
Paragraph page = new Paragraph(String.format("Page %d of ", writer.getPageNumber()), font5);
tblpages.addCell(page);
PdfPCell pages = new PdfPCell(Image.getInstance(total));
pages.setBorder(Rectangle.TOP);
tblpages.addCell(pages).setHorizontalAlignment(Element.ALIGN_LEFT);
tblpages.writeSelectedRows(0, -1, 10, tblpages.getTotalHeight(), writer.getDirectContent());
}
catch(DocumentException de) {
throw new ExceptionConverter(de);
}
}
/**
* Fills out the total number of pages before the document is closed.
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(
* com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
*/
public void onCloseDocument(PdfWriter writer, Document document) {
ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
new Phrase(String.valueOf(writer.getPageNumber() - 1), font5),
2, 7, 0);
}
}