提问者:小点点

当超出给定矩形区域(itext7)时,如何将内容写入新页面


如何获取当前页码?

用例:使用itext5编写的应用程序需要使用itext7重写。我们的应用程序为客户的每月账单生成PDF文件。

pdf的结构:

>

  • 创建文档:

     PdfWriter writer = new PdfWriter(new FileOutputStream(filename));
     PdfDocument pdfDocument = new PdfDocument(writer);
     Document document = new Document(pdfDocument, PageSize.A4);
     document.setMargins(82, 35, 0, 38);
     buildBody(pdfData, document, writer);
     pdfDocument.addEventHandler(PdfDocumentEvent.START_PAGE, new PdfStartPageHandler<>(pdfData, document, this));
     pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new PdfEndPageHandler(document));
     buildBodyContent(pdfData, document, writer);
     document.close();
    

    2.每个IEventHandler实例都有这种格式(矩形值除外):

    public void handleEvent(Event event) {
      document.add(lineSeparatorHeader);
      document.add(paragraphInfo); // 
      document.add(lineSeparatorHeader);
    }
    

    ParumraphInfo-是一个段落(),它由一个包含两列的表组成

    line分隔符标头-是一个线分隔符()

    A.是每页都需要的页眉。B.是内容为的正文,可能占用不止一页。如果它占用了不止一页,新页面还必须包含页眉和页脚。C.是页脚


  • 共1个答案

    匿名用户

    从评论中积累你的想法和一些建议,可以做到以下几点:

    >

  • 通过在Document实例上设置边距来为页脚和页眉保留空间,确保不会将添加到Document的内容放置在它们上。

    像您已经做的那样添加页脚和页眉事件。

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
    Document doc = new Document(pdfDoc);
    
    int headerHeight = 100;
    int footerHeight = 200;
    
    float[] oldMargins = new float[] {doc.getTopMargin(), doc.getRightMargin(), doc.getBottomMargin(),
            doc.getLeftMargin()};
    doc.setMargins(doc.getTopMargin() + headerHeight, doc.getRightMargin(), doc.getBottomMargin() + footerHeight,
            doc.getLeftMargin());
    
    pdfDoc.addEventHandler(PdfDocumentEvent.START_PAGE, new IEventHandler() {
        @Override
        public void handleEvent(Event event) {
            PdfDocumentEvent pdfDocumentEvent = (PdfDocumentEvent) event;
            PdfPage page = pdfDocumentEvent.getPage();
            Rectangle pageRectangle = page.getPageSize();
            Rectangle headerArea = new Rectangle(oldMargins[3], pageRectangle.getTop() - oldMargins[0] - headerHeight,
                    pageRectangle.getWidth() - oldMargins[1] - oldMargins[3], headerHeight);
            new Canvas(page, headerArea).add(
                    new Div()
                            .setHeight(headerArea.getHeight())
                            .setWidth(headerArea.getWidth())
                            .setBackgroundColor(ColorConstants.RED))
                    .close();
        }
    });
    pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new IEventHandler(){
        @Override
        public void handleEvent(Event event) {
            PdfDocumentEvent pdfDocumentEvent = (PdfDocumentEvent) event;
            PdfPage page = pdfDocumentEvent.getPage();
            Rectangle pageRectangle = page.getPageSize();
            Rectangle footerArea = new Rectangle(oldMargins[3], pageRectangle.getBottom() + oldMargins[2],
                    pageRectangle.getWidth() - oldMargins[1] - oldMargins[3], footerHeight);
            new Canvas(page, footerArea).add(
                    new Div()
                            .setHeight(footerArea.getHeight())
                            .setWidth(footerArea.getWidth())
                            .setBackgroundColor(ColorConstants.YELLOW))
                    .close();
        }
    });
    
    for (int i = 0; i < 100; i++) {
        doc.add(new Paragraph("I'm body's paragraph #" + i));
    }
    
    doc.close();