我对iTextSharp很新。我通过将可变数据(文本/条形码/图像)添加到现有PDF文档/模板(想想样板)来创建PDF。最常见的是,我必须在特定的地方放置各种文本部分。我知道如何创建一个有序列表,但我遇到的情况是列表在第一页上以#1开头,然后在第二页顶部以#2-4开头。我为p1和p2使用了两个不同的模板。
我目前正在创建文档,方法是创建ColumnTexts,将SimpleColumns放置在特定的坐标上,然后在其中放置短语。我不确定这是否是最好的方式,所以我愿意接受其他解决方案。
我查看过多个地方,包括http://www.mikesdotnetting.com/article/83/lists-with-itextsharp,但我没有看到任何描述如何以#1;'以外的数字开始列表的内容。 6个重载中没有一个提供起始编号的参数。
谢谢!
答案 0 :(得分:0)
您的问题有两个答案。第一个是指向官方文档。有一种方法setFirst()
(我引用)设置列表中必须先出现的数字。
您正在使用iText的C#端口,因此如果您希望列表从10开始计数,您需要执行以下操作:
list.First = 10;
第二个答案需要更多时间,但它可能是更好的一个。你不需要两个List
个对象,一个用于第一页,一个用于第二页。最好将List
添加到ColumnText
对象,然后将该列分布在两页上。
看看ListInColumn示例。它需要一个现有的PDF(带有文本" Hello World Hello People")并使用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();
如果没有添加所有内容,我会更改画布以在第二页上添加其余内容:
ct.setCanvas(stamper.getOverContent(2));
其余代码非常标准。
我认为setCanvas()
方法是您拼图中缺失的部分,但在您的情况下,您需要:
ct.Canvas = stamper.GetOverContent(2);