iTextSharp - 第二页上的继续有序列表,其中的数字不是' 1'

时间:2015-03-26 11:46:48

标签: itextsharp

我对iTextSharp很新。我通过将可变数据(文本/条形码/图像)添加到现有PDF文档/模板(想想样板)来创建PDF。最常见的是,我必须在特定的地方放置各种文本部分。我知道如何创建一个有序列表,但我遇到的情况是列表在第一页上以#1开头,然后在第二页顶部以#2-4开头。我为p1和p2使用了两个不同的模板。

我目前正在创建文档,方法是创建ColumnTexts,将SimpleColumns放置在特定的坐标上,然后在其中放置短语。我不确定这是否是最好的方式,所以我愿意接受其他解决方案。

我查看过多个地方,包括http://www.mikesdotnetting.com/article/83/lists-with-itextsharp,但我没有看到任何描述如何以#1;'以外的数字开始列表的内容。 6个重载中没有一个提供起始编号的参数。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题有两个答案。第一个是指向官方文档。有一种方法setFirst()(我引用)设置列表中必须先出现的数字

您正在使用iText的C#端口,因此如果您希望列表从10开始计数,您需要执行以下操作:

list.First = 10;

第二个答案需要更多时间,但它可能是更好的一个。你不需要两个List个对象,一个用于第一页,一个用于第二页。最好将List添加到ColumnText对象,然后将该列分布在两页上。

看看ListInColumn示例。它需要一个现有的PDF(带有文本" Hello World Hello People")并使用ColumnText添加一个列表:list_in_column.pdf

enter image description here

这就是它的完成方式:

PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
List list = new List(List.ORDERED);
for (int i = 0; i < 10; i++) {
        list.add("...");
}
ColumnText ct = new ColumnText(stamper.getOverContent(1));
ct.addElement(list);
Rectangle rect = new Rectangle(250, 400, 500, 806);
ct.setSimpleColumn(rect);
int status = ct.go();
if (ColumnText.hasMoreText(status)) {
    ct.setCanvas(stamper.getOverContent(2));
    ct.setSimpleColumn(rect);
    ct.go();
}
stamper.close();

要在第一页上添加内容,我使用:

ColumnText ct = new ColumnText(stamper.getOverContent(1));

您可能正在使用类似的代码。

使用以下行添加内容:

int status = ct.go();

如果没有添加所有内容,我会更改画布以在第二页上添加其余内容:

ct.setCanvas(stamper.getOverContent(2));

其余代码非常标准。

我认为setCanvas()方法是您拼图中缺失的部分,但在您的情况下,您需要:

ct.Canvas = stamper.GetOverContent(2);