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文件