2012-08-29 20 views
5

我使用iText java lib创建3列布局。如何使用iText跳过文本插入点到下一列?

最大的问题是,第一列中的文本可能小于第二列中的文本或第三列中的第三列或更少。所以我需要将插入点移到下一列。

我试图使用nextColumn方法,它应该将插入点移动到 下一列,但它将所有列移动到右侧。

也许任何人都有同样的问题,并知道如何做到这一点的权利?

感谢您的回答!

下图显示了我想要的东西。 columns layout

UPDATE:

好吧,我会尝试重组的问题。

这里是我的代码如何申报3列:

MultiColumnText columnsFooter = new MultiColumnText(210f); 
columnsFooter.addRegularColumns(document.left() - 10f, 
    document.right(), 0, 3); 
columnsFooter.setAlignment(Element.ALIGN_CENTER); 

我有3列页眉和每列一些文本。文字取决于用户今天输入了多少文字。如果用户填充文本限制为OK,因为第一列已填充,第二个文本将进入第二列(第二个文本从第二列开始)。

但是,如果用户没有填写第一列或第二列的文本限制,则下一个从列中填写未填满的文本。

I.e.

这是可以的,因为第一列和第二列已完全填满。

enter image description here

这是不好的,因为第一列没有完全填平,第二列文本从第一列开始。因此,如果文本没有完全填满,我需要在HEADER 2和3之前添加列分隔以获得良好的布局结构。

enter image description here

回答

4

你能改写这个问题?因为我不理解它。什么是插入点? 我写了关于iText的书,我可以做任何我想用ColumnText做的事情,所以澄清你想要的内容可能对你有兴趣。

这个问题仍然不清楚,但图片上说了千言万语。我以4列5篇文章为例:

import java.io.FileOutputStream; 
import java.io.IOException; 

import com.itextpdf.text.Document; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.PageSize; 
import com.itextpdf.text.Paragraph; 
import com.itextpdf.text.pdf.ColumnText; 
import com.itextpdf.text.pdf.PdfWriter; 


public class ColumnTextExample { 


    /** Definition of four columns */ 
    public static final float[][] COLUMNS = { 
     { 36, 36, 224, 579 } , { 230, 36, 418, 579 }, 
     { 424, 36, 612, 579 } , { 618, 36, 806, 579 } 
    }; 

    public static final String ARTICLE1 = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; 
    public static final String ARTICLE2 = ARTICLE1 + " " + ARTICLE1 + " " + ARTICLE1; 
    public static final String ARTICLE3 = ARTICLE1 + " " + ARTICLE1; 
public static final String[] ARTICLES = { "HEADER 1\n" + ARTICLE1, "HEADER 2\n" + ARTICLE2, "HEADER 3\n" + ARTICLE3, "HEADER 4\n" + ARTICLE1, "HEADER 5\n" + ARTICLE3 }; 

    public static void main(String[] args) throws IOException, DocumentException { 
     // step 1 
     Document document = new Document(PageSize.A4.rotate()); 
     // step 2 
     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("columns.pdf")); 
     // step 3 
     document.open(); 
     // step 4 
     ColumnText ct = new ColumnText(writer.getDirectContent()); 
     int column = 0; 
     ct.setSimpleColumn(
      COLUMNS[column][0], COLUMNS[column][1], 
      COLUMNS[column][2], COLUMNS[column][3]); 
     int status = ColumnText.START_COLUMN; 
     for (String article : ARTICLES) { 
      ct.addElement(new Paragraph(article)); 
      status = ct.go(); 
      while (ColumnText.hasMoreText(status)) { 
       column = nextColumn(document, column, ct); 
       status = ct.go(); 
      } 
      column = nextColumn(document, column, ct); 
     } 
     // step 5 
     document.close(); 
    } 

    public static int nextColumn(Document document, int column, ColumnText ct) { 
     column = (column + 1) % 4; 
     if (column == 0) 
      document.newPage(); 
     ct.setSimpleColumn(
       COLUMNS[column][0], COLUMNS[column][1], 
       COLUMNS[column][2], COLUMNS[column][3]); 
     return column; 
    } 
} 

第一篇文章适合第一栏,留下半栏打开。我们跳到第二篇文章的下一列。这不适合第二列:它需要一列半。第三篇文章适合第四篇文章,但我们需要跳到第四篇文章的下一页,等等...... enter image description here

+0

看到的图片,你会看到什么,我希望它 http://imgur.com/KkLln – burjulius

+0

感谢的答案,但不是我所需要的。我已经重申了这个问题,我希望现在你能理解我想要的东西。 – burjulius

+0

1.您正在使用MultiColumnText。我甚至不知道它仍在发布。我将在下一个版本中删除它。请不要使用它! –

相关问题