iText PDF / A-2 Java добавить общее количество страниц в нижнем колонтитуле - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужно добавить общее количество страниц в документ PDF / A-2, созданный с использованием iText в Java. Используется следующий код:

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

А при создании PDF следующий код называется:

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

Теперь, когда мы добавляем контент на 2 страницах и используем document.newPage() для добавления новой страницы, генерируется исключение времени выполнения The page 3 was requested but the document has only 2 pages. Каково решение этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...