Java 如何添加文本“;“继续……”;在新页面上,当一个元素被setKeepTogether拆分时(true)

Java 如何添加文本“;“继续……”;在新页面上,当一个元素被setKeepTogether拆分时(true),java,itext,Java,Itext,当元素由于setKeepTogether(true)配置而移动到新页面时,我需要在新页面上添加一个文本“continuation of…” 使用PageEvent.onStartPage()但不允许在PageEvent中调用Document.add() 但现在如何解决这个问题呢 这个小例子再现了我的问题: public class Main { public static String continuation = null; public static void main(f

元素
由于
setKeepTogether(true)
配置而移动到新页面时,我需要在新页面上添加一个文本“continuation of…”

使用
PageEvent.onStartPage()
但不允许在
PageEvent
中调用
Document.add()

但现在如何解决这个问题呢

这个小例子再现了我的问题:

public class Main {
    public static String continuation = null;

    public static void main(final String[] args) throws Exception {
        final Document document = new Document(PageSize.A7);

        final PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("text.pdf"));

        document.open();

        // Now I add the introduction text
        document.add(new Paragraph("A nice \nIntroduction \nover some lines."));

        // Now I put my "huge" paragraph. When it breaks,
        // the first line of the new page should be "Continuation of smth."
        continuation = "smth.";

        final Paragraph paragraph = new Paragraph("What is \nthe answer \nto life the \nuniverse and \neverything?\n\nThe Answer to \nthis question \nis:\n42");
        paragraph.setKeepTogether(true);

        document.add(paragraph);

        document.close();
    }
}

结果应该看起来像。

这可以通过使用
PdfPTable的
headerRows
进行黑客攻击

这真的是一次黑客攻击,也许其他人有更好的主意来达到目标:

public static void main(final String[] args) throws Exception
{
    final Document document = new Document(PageSize.A7);

    PdfWriter.getInstance(document, new FileOutputStream("text.pdf"));

    document.open();

    // The content gets wrapped into an table. If the table breaks
    // we utilize the "headerRows" to print `Continuation of xx`.
    final PdfPTable table = new PdfPTable(1);
    table.setHeadersInEvent(false);
    table.setHeaderRows(1);
    table.setSkipFirstHeader(true);
    table.setWidthPercentage(100);
    table.getDefaultCell().setBorder(0);
    table.getDefaultCell().setPadding(0);

    // This is the header we print ONLY if the page breaks.
    table.addCell("Continuation of " + "smth.");

    // Now I add the introduction text
    final PdfPTable firstText = new PdfPTable(1);
    firstText.addCell("A nice \nIntroduction \ninto \"smth.\" \nover some lines.");
    // in the original code i add some other things here as well
    table.addCell(firstText);

    // Now I put a "huge" paragraph (it will not fit on the first page
    final PdfPTable secondText = new PdfPTable(1);
    secondText.addCell("Force \na pagebreak\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf.");
    // in the original code i add some other things here as well
    table.addCell(secondText);

    document.add(table);

    document.close();
}
代码生成正确的PDF。但是这条路真的很难看

我已经上传了PDF文件