2016-10-30 3 views
0

私のコードに問題があります。いったん私のpdfページが正しく作成され、ItextPdf 7の例を使用しています。私はPage x of Yのページ数ですべてのページを印刷したいと思います...コードは正しく実行されているようですが、 。事前 でPDFへの印刷...最後の2ページのみ

おかげでアレックス

私のコードの下

.....snippet code for document creation ! 

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

Eこれは私が印刷に使用するクラスです:

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

次の2行であるかのように見えますあなたのコードの最後に:

// 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

関連する問題