2014-03-04 14 views
3

Element由於setKeepTogether(true)配置而移動到新頁面時,我需要一個文本「繼續......」到新頁面。如何在新頁面追加文本「Continuation of ...」,當一個元素被setKeepTogether分開時(true)

I tried thatPageEvent.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

回答

0

這可以通過使用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

相關問題