打印成Pdf格式,只有最后两页



我的代码有问题。一旦我正确地创建了我的pdf页面,使用ItextPdf 7的例子,我想打印每个页面的页数为Y的页面x ....代码似乎运行正常,但只有最后两页正确打印。

提前感谢亚历克斯

下面的代码:

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

看起来好像这两行就在你代码的末尾:

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

这将导致最后一页触发事件not

最新更新