我创建了3列布局的iText的Java库。
最大的问题是,在第一列中的文本可能小于在第二列或第三个或更少比第三列第二列。 所以,我需要将插入点移动到下一列。
我试图用nextColumn方法应该插入点移动到下一列,但它移动所有列在右侧。
也许人有同样的问题,并知道如何做是正确的?
感谢您的解答!
下面的图片是什么,我想它。
更新:
好吧,我会尝试重组的问题。
这是我如何申报3列的代码:
MultiColumnText columnsFooter = new MultiColumnText(210f);
columnsFooter.addRegularColumns(document.left() - 10f,
document.right(), 0, 3);
columnsFooter.setAlignment(Element.ALIGN_CENTER);
我有3列页眉和每列一些文本。 文本取决于用户今天多少文本输入。 如果用户填写的文字限制是可以的,因为第一列被填满和第二文本进入第二列(第二个文本从第二栏开始)。
但是,如果用户不填写第一列或第二列的下一个开始从中不能完全填补了列写作文的限制。
即
这是正常的,因为第一和第二列完全填满。
这是不好的,因为第一列没有完全填平,第二列文本从第一列开始。 所以,我需要添加分栏符之前标题2和3获得良好的布局结构,如果文本没有完全填满。
你能改写这个问题? 因为我不明白。 什么是插入点? 我写这本书关于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;
}
}
第一篇文章符合第一列,留下半列开。 我们跳到第二条下一列。 不符合第二栏:它需要一列半。 第三条符合第四列,但我们需要跳到下页第四条,等等...