iTextSharp - 在第二页上使用非“1”的数字继续排序列表
iTextSharp - Continuing ordered list on second page with a number other than '1'
我对 iTextSharp 还很陌生。我通过将可变数据 (text/barcodes/images) 添加到现有 PDF documents/templates(想想样板)来创建 PDF。最常见的是,我必须将不同的文本部分放在特定的位置。我知道如何创建有序列表,但我遇到过这样一种情况,即列表在第一页以#1 开头,然后在第二页顶部以#2-4 开头。我为 p1 和 p2 使用了两个不同的模板。
我目前正在通过创建 ColumnText、放置具有特定坐标的 SimpleColumns,然后在其中放置短语来创建文档。我不确定这是否是最好的方法,所以我愿意接受其他解决方案。
我已经检查了几个地方,包括 http://www.mikesdotnetting.com/article/83/lists-with-itextsharp,但我没有看到任何描述如何以“1”以外的数字开始列表的内容。 6 个重载中的 None 提供起始编号参数。
谢谢!
您的问题有两个答案。第一个是将您指向官方文档。有一种方法 setFirst()
(我引用)设置列表中必须排在第一位的数字。
您正在使用 iText 的 C# 端口,因此如果您希望列表从 10 开始计数,您需要执行如下操作:
list.First = 10;
第二个答案需要更多时间,但可能更好 one.You 不需要两个 List
对象,一个用于第一页,一个用于第二页。最好将 List
添加到 ColumnText
对象,然后将该列分布在两页上。
看看ListInColumn example. It takes an existing PDF (with the text "Hello World Hello People") and it adds a list using ColumnText
: list_in_column.pdf
这是如何完成的:
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();
如果没有添加所有内容,我更改canvas以在第二页添加其余内容:
ct.setCanvas(stamper.getOverContent(2));
其余代码非常标准。
我认为 setCanvas()
方法是您的难题中缺少的部分,但在您的情况下,您需要:
ct.Canvas = stamper.GetOverContent(2);
我对 iTextSharp 还很陌生。我通过将可变数据 (text/barcodes/images) 添加到现有 PDF documents/templates(想想样板)来创建 PDF。最常见的是,我必须将不同的文本部分放在特定的位置。我知道如何创建有序列表,但我遇到过这样一种情况,即列表在第一页以#1 开头,然后在第二页顶部以#2-4 开头。我为 p1 和 p2 使用了两个不同的模板。
我目前正在通过创建 ColumnText、放置具有特定坐标的 SimpleColumns,然后在其中放置短语来创建文档。我不确定这是否是最好的方法,所以我愿意接受其他解决方案。
我已经检查了几个地方,包括 http://www.mikesdotnetting.com/article/83/lists-with-itextsharp,但我没有看到任何描述如何以“1”以外的数字开始列表的内容。 6 个重载中的 None 提供起始编号参数。
谢谢!
您的问题有两个答案。第一个是将您指向官方文档。有一种方法 setFirst()
(我引用)设置列表中必须排在第一位的数字。
您正在使用 iText 的 C# 端口,因此如果您希望列表从 10 开始计数,您需要执行如下操作:
list.First = 10;
第二个答案需要更多时间,但可能更好 one.You 不需要两个 List
对象,一个用于第一页,一个用于第二页。最好将 List
添加到 ColumnText
对象,然后将该列分布在两页上。
看看ListInColumn example. It takes an existing PDF (with the text "Hello World Hello People") and it adds a list using ColumnText
: list_in_column.pdf
这是如何完成的:
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();
如果没有添加所有内容,我更改canvas以在第二页添加其余内容:
ct.setCanvas(stamper.getOverContent(2));
其余代码非常标准。
我认为 setCanvas()
方法是您的难题中缺少的部分,但在您的情况下,您需要:
ct.Canvas = stamper.GetOverContent(2);