2016-10-30 3 views
0

내 코드에 문제가 있습니다. 일단 내 PDF 페이지가 제대로 만들어지면, ItextPdf 7의 예를 사용하여 Page x of Y로 페이지 번호를 인쇄하고 싶습니다. 코드는 올바르게 실행되지만 마지막 2 페이지 만 제대로 인쇄됩니다. . 사전에Pdf로 인쇄 ... 마지막 2 페이지에만

감사 알렉스 내 코드 아래

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

, 당신은 어떻게 작동하는지 이해하게 될 것입니다. 이 마지막 페이지에 대해 트리거 할 이벤트 하지 원인

pdf.removeEventHandler(PdfDocumentEvent.START_PAGE, handler); 

: 또 다른 예합니다 (ImageWatermark 예 참조), 나는 이벤트 처리기를 제거합니다.

+0

작동합니다 .... 감사합니다. – Magobin