gpt4 book ai didi

java - 当元素被 setKeepTogether(true) 分割时,如何在新页面附加文本 "Continuation of ..."

转载 作者:行者123 更新时间:2023-12-02 08:51:55 25 4
gpt4 key购买 nike

Element 由于 setKeepTogether(true) 配置而移动到新页面时,我需要文本“Contiutation of ...” 到新页面。

I tried that使用 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();
}
}

结果应该看起来像 this .

最佳答案

这可以通过使用 PdfPTableheaderRows 来破解。

这确实是一个黑客,也许其他人有更好的想法来实现目标:

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 here .

关于java - 当元素被 setKeepTogether(true) 分割时,如何在新页面附加文本 "Continuation of ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22173420/

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