2016-10-30 6 views
0

У меня проблема с моим кодом. После того, как у меня будет правильно создана страница pdf, используя пример ItextPdf 7, я хочу напечатать на каждой странице количество страниц в виде страницы x из Y .... код кажется запущенным правильно, но только последние 2 страницы правильно напечатаны ,Печать на Pdf ... только последние 2 страницы

Заранее спасибо Alex

ниже моего кода:

.....snippet code for document creation ! 

    PageXofY event = new PageXofY(pdf); 
    pdf.addEventHandler(PdfDocumentEvent.END_PAGE, event) ; 
    event.writeTotal(pdf); 
    document.close(); 

е это класс, который я использую для печати:

protected class PageXofY implements IEventHandler { 
protected PdfFormXObject placeholder; 
protected float side = 20; 
protected float x = 300; 
protected float y = 25; 
protected float space = 4.5f; 
protected float descent = 3; 

public PageXofY(PdfDocument pdf) { 
    placeholder = new PdfFormXObject(new Rectangle(0, 0, side, side)); 

} 
@Override 
public void handleEvent(Event event) { 
    PdfDocumentEvent docEvent = (PdfDocumentEvent) event; 
    PdfDocument pdf = docEvent.getDocument(); 
    PdfPage page = docEvent.getPage(); 

    int pageNumber = pdf.getPageNumber(page); 

    Rectangle pageSize = page.getPageSize(); 
    PdfCanvas pdfCanvas = new PdfCanvas(
     page.getLastContentStream(), page.getResources(), pdf); 
    Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize); 
    Paragraph p = new Paragraph() 
     .add("Pagina ").add(String.valueOf(pageNumber)).add(" di"); 
    canvas.showTextAligned(p, x, y, TextAlignment.RIGHT); 
    pdfCanvas.addXObject(placeholder, x + space, y - descent); 
    pdfCanvas.release(); 
} 
public void writeTotal(PdfDocument pdf) { 
    Canvas canvas = new Canvas(placeholder, pdf); 
    canvas.showTextAligned(String.valueOf(pdf.getNumberOfPages()), 
     0, descent, TextAlignment.LEFT); 
} 

ответ

1

Это выглядит, как если бы эти две строки в конце вашего кода:

// add all the content here 
PageXofY event = new PageXofY(pdf); 
pdf.addEventHandler(PdfDocumentEvent.END_PAGE, event) ; 
event.writeTotal(pdf); 
document.close(); 

Это означает, что event активируется только после того, как вы уже добавили большую часть своего контента, что объясняет, почему нижний колонтитул добавляется только для страниц в конце вашего документа.

Пожалуйста, измените свой код так:

PageXofY event = new PageXofY(pdf); 
pdf.addEventHandler(PdfDocumentEvent.END_PAGE, event) ; 
// add all the content here 
event.writeTotal(pdf); 
document.close(); 

Я являюсь автором примера, который вы использовали для вдохновения. Если вы внимательно посмотрите на оригинальный PageXofY Например, вы увидите, что я добавить обработчик событий еще до создания экземпляра Document:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
PageXofY event = new PageXofY(pdf); 
pdf.addEventHandler(PdfDocumentEvent.END_PAGE, event); 
Document document = new Document(pdf); 
// add all the content 
event.writeTotal(pdf); 
document.close(); 

Если вы читали всю главу, вы поймете, как это работает. В другом примере (см ImageWatermark пример), я удалить обработчик событий:

pdf.removeEventHandler(PdfDocumentEvent.START_PAGE, handler); 

Это вызывает событие не для срабатывания на последней странице.

+0

это работает .... Большое спасибо за вашу поддержку! – Magobin

Смежные вопросы