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);
	}
	}