向文档添加`PdfPTable`时出错

时间:2015-01-11 05:21:33

标签: c# itextsharp

我正面对着

  

索引超出了数组的范围

使用PdfPTable向文档添加iTextShrap时出现

错误。以下是代码

Document myDocument = new Document(PageSize.A3.Rotate());
PdfWriter.GetInstance(myDocument, new FileStream("payslip.pdf", FileMode.Create));
myDocument.Open();
PdfPTable table = new PdfPTable(35);
table.TotalWidth = myDocument.PageSize.Width - 80f;
table.LockedWidth = true;
List<PdfPCell> headRow = new List<PdfPCell>();
PdfPCell contractor = new PdfPCell(new Phrase("XXXXXXXXXXXXX"));
contractor.Colspan = 5;
headRow.Add(contractor);
PdfPCell workType = new PdfPCell(new Phrase("Refractory Works"));
workType.Colspan = 5;
headRow.Add(workType);
PdfPCell supervisor = new PdfPCell(new Phrase("XXXXXXXXXXXXXX"));
supervisor.Colspan = 4;
headRow.Add(supervisor);
PdfPCell paySlipHead = new PdfPCell(new Phrase("XXXXXXXXXXXXXXXX"));
paySlipHead.Colspan = 10;
headRow.Add(paySlipHead);
PdfPCell paySlipMonth = new PdfPCell(new Phrase("XXXXXXX"));
paySlipMonth.Colspan = 2;
headRow.Add(paySlipMonth);
PdfPCell blank = new PdfPCell(new Phrase(""));
blank.Colspan = 9;
headRow.Add(blank);
PdfPRow rw = new PdfPRow(headRow.ToArray());

table.Rows.Add(rw);

myDocument.Add(table);

我不知道出了什么问题。请建议

1 个答案:

答案 0 :(得分:1)

问题是由于您不尊重文档中解释的内容,更具体地说是我写的部分:

  

PdfPRow包中有一个com.itextpdf.text.pdf对象,但您不应该这样做   直接解决它。 iText在内部使用此类来存储属于的单元格   到同一排。 (iText in Action - 第二版,第4.1.1节&#34;您的第一个表&#34;,第94页)

如果你甚至没有花时间看一下基本的例子,你不应该期望你可以编写有效的代码。

请查看SimpleTable3示例。在此示例中,我不使用PdfPRow。相反,我将PdfPCell个对象直接添加到PdfPTable

PdfPTable table = new PdfPTable(35);
table.setTotalWidth(document.getPageSize().getWidth() - 80);
table.setLockedWidth(true);
PdfPCell contractor = new PdfPCell(new Phrase("XXXXXXXXXXXXX"));
contractor.setColspan(5);
table.addCell(contractor);
PdfPCell workType = new PdfPCell(new Phrase("Refractory Works"));
workType.setColspan(5);
table.addCell(workType);
PdfPCell supervisor = new PdfPCell(new Phrase("XXXXXXXXXXXXXX"));
supervisor.setColspan(4);
table.addCell(supervisor);
PdfPCell paySlipHead = new PdfPCell(new Phrase("XXXXXXXXXXXXXXXX"));
paySlipHead.setColspan(10);
table.addCell(paySlipHead);
PdfPCell paySlipMonth = new PdfPCell(new Phrase("XXXXXXX"));
paySlipMonth.setColspan(2);
table.addCell(paySlipMonth);
PdfPCell blank = new PdfPCell(new Phrase(""));
blank.setColspan(9);
table.addCell(blank);
document.add(table);

您不必担心行:iText会在内部创建PdfPRow个实例(记录)。

结果如下:simple_table3.pdf

enter image description here

没有抛出异常。