2016-10-30 86 views
0

我有我的代碼問題。一旦我正確創建了我的PDF頁面,使用ItextPdf 7的示例,我希望爲每個頁面打印頁數爲Y的頁面x ....代碼似乎運行正常,但只有最後2頁才能正確打印。打印到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

看起來好像這兩條線在您的代碼末尾:

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