2016-10-30 2 views
0

Ich habe ein Problem mit meinem Code. Sobald ich meine PDF-Seite korrekt erstellt habe, möchte ich mit einem Beispiel von ItextPdf 7 für jede Seite die Seitenzahl als Seite x von Y drucken .... der Code scheint korrekt zu laufen, aber nur die letzten 2 Seiten werden korrekt gedruckt .Print to Pdf ... nur letzte 2 Seiten

Vielen Dank im Voraus Alex

unter meinem Code:

.....snippet code for document creation ! 

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

e Dies ist die Klasse, die ich zu drucken verwenden:

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

Antwort

1

Es sieht aus, als ob diese beiden Linien sind Am Ende Ihres Codes:

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

Das bedeutet, dass die event erst aktiv wird, nachdem Sie die meisten Inhalte bereits hinzugefügt haben. Dies erklärt, warum die Fußzeile nur für die Seiten am Ende des Dokuments hinzugefügt wird.

Bitte ändern Sie Ihren Code wie folgt aus:

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

Ich bin der Autor des Beispiels Sie für Inspiration verwendet. Wenn Sie genau an dem ursprünglichen PageXofY Beispiel anschauen, werden Sie sehen, dass ich die Event-Handler hinzufügen, noch bevor die Document Instanz:

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

Wenn Sie das vollständige Kapitel lesen, werden Sie verstehen, wie es funktioniert. In einem anderen Beispiel (siehe ImageWatermark Beispiel), entferne ich die Event-Handler:

pdf.removeEventHandler(PdfDocumentEvent.START_PAGE, handler); 

Das das Ereignis verursacht nicht ausgelöst für die letzte Seite zu sein.

+0

es funktioniert .... Vielen Dank für Ihre Unterstützung! – Magobin