iText PDF/A-2 Java add total page count in footer

649 views Asked by At

I need to add the total page count to a PDF/A-2 document created using iText in Java. The following code is being used:

public class HeaderFooterPageEvent extends PdfPageEventHelper {

 Font fontHEADER = null;

 /** The template with the total number of pages. */
 PdfTemplate total;

public HeaderFooterPageEvent() {
    try {
        fontHEADER = new Font(BaseFont.createFont("OpenSans-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 8, Font.BOLD);
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
 }

 @Override
 public void onOpenDocument(PdfWriter writer, Document document) {
    total = writer.getDirectContent().createTemplate(30, 16);
    super.onOpenDocument(writer, document);
 } 

 @Override
 public void onCloseDocument(PdfWriter writer, Document document) {
    PdfContentByte cb = writer.getDirectContent();
    ColumnText.showTextAligned(total, Element.ALIGN_RIGHT,
            new Phrase(String.valueOf(writer.getPageNumber() - 1)),fontHEADER),
            document.right() - document.rightMargin()+5, 
            document.bottom() - 10, 0);
    super.onCloseDocument(writer, document);
 }
}

And when creating the PDF the following code is called:

    Document document = new Document(PageSize.A4, 15, 15, 30, 20);

    PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(dest), PdfAConformanceLevel.PDF_A_2A);
    writer.createXmpMetadata();
    writer.setTagged();

 // add header and footer
    HeaderFooterPageEvent event = new HeaderFooterPageEvent();
    writer.setPageEvent(event);

    document.open();
    document.addLanguage("en-us");
    File file = new File("sRGB_CS_profile.icm");
    ICC_Profile icc = ICC_Profile
            .getInstance(new FileInputStream(file));
    writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
    Paragraph p=new Paragraph("Page 1 content",fontEmbedded); //setting an embedded font
    p.setSpacingBefore(30f);
    document.add(p);
    document.newPage();
    document.add(new Paragraph("Content of next page goes here",fontEmbedded));


    document.close();

Now when we add content on 2 pages and use document.newPage() to add the new page, runtime exception is generated The page 3 was requested but the document has only 2 pages. What is a solution to this problem?

0

There are 0 answers