5

我正在使用 iText java lib 创建 3 列布局。

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

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

也许有人有同样的问题并且知道如何做对吗?

感谢您的回答!

下图显示了我想要的。 列布局

更新:

好的,我会尝试改写这个问题。

这是我如何声明 3 列的代码:

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

我有 3 列带有标题和每列中的一些文本。文本取决于用户今天输入了多少文本。如果用户填写了文本限制,则可以,因为第一列已填写,第二个文本进入第二列(第二个文本从第二列开始)。

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

IE

这没关系,因为第一列和第二列已完全填满。

在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

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;
    }
}

第一篇文章适合第一列,留下半列开放。第二篇文章我们跳到下一栏。这不适合第二列:它需要一列半。第三条适合第四列,但是第四条我们需要跳到下一页,以此类推…… 在此处输入图像描述

于 2012-08-30T12:48:22.557 回答