gpt4 book ai didi

java - 打印为 Pdf...仅最后 2 页

转载 作者:行者123 更新时间:2023-12-01 09:18:39 26 4
gpt4 key购买 nike

我的代码有问题。一旦我正确创建了 pdf 页面,使用 ItextPdf 7 的示例,我想打印每页的页数为第 x 页,共 Y 页......代码似乎运行正确,但只有最后 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);
}

最佳答案

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

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

这意味着事件仅在您添加了大部分内容后才会激活,这解释了为什么仅为文档末尾的页面添加页脚。

请像这样更改您的代码:

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

这会导致最后一页触发事件。

关于java - 打印为 Pdf...仅最后 2 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40328459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com