【发布时间】:2019-06-08 17:44:57
【问题描述】:
我有这样的代码
string[] data = new string[] { "1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14",
"1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14",
"1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14",
"1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14",
"1", "2", "3", "4", "5", "6", "7", "8",
"1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "11", "12", "13", "14",
"9", "10", "11", "12", "13", "14",};
using (PdfWriter writer = new PdfWriter(destinationFile))
{
// Creating a PdfDocument object
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
// Creating a Document object
using (Document doc = new Document(pdfDoc))
{
// Creating a table
float[] pointColumnWidths1 = { 150f, 150f, 150f, 150f };
Table table = new Table(pointColumnWidths1);
Cell cell;
float[] pointColumnWidths2 = { 150f };
Table nestedTable = new Table(pointColumnWidths2);
for (int y = 0; y < data.Length; y++)
{
cell = new Cell();
cell.Add(data[y]);
nestedTable.AddCell(cell);
}
table.AddCell(nestedTable);
doc.Add(table);
doc.Close();
}
}
}
这是输出
我在做什么是使用 itext 而不是 itextsharp 填充 四个 表列。
好的,到目前为止,嵌套表正在工作。但是如果data 数组填充了最多 100 个数组字符串。我收到一个错误
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
我认为错误是因为填充的嵌套表对于父表来说太大了?
如果嵌套表太大,我该如何调整它。一些数据将写入下一列。我无法真正解决我自己的问题,所以我在这里问一个问题。
抱歉,问题不完整。
这是错误
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at System.Collections.Generic.List`1.set_Item(Int32 index, T value)
at iText.Layout.Renderer.TableRenderer.UpdateFirstRowBorders(Int32 colN)
at iText.Layout.Renderer.TableRenderer.CollapseAllBorders()
at iText.Layout.Renderer.TableRenderer.Layout(LayoutContext layoutContext)
at iText.Layout.Renderer.RootRenderer.AddChild(IRenderer renderer)
at iText.Layout.RootElement`1.Add(IBlockElement element)
at iText.Layout.Document.Add(IBlockElement element)
at PdfItextSample.Program.CreatePdf(String destinationFile, List`1 lst)
它指向行
doc.Add(table);
非常感谢
【问题讨论】:
-
“我收到一个错误” - 在哪一行?使用哪个堆栈跟踪?
-
Hello.Good day @mkl 对于不完整的问题,我深表歉意。我已经更新了问题并用它指向的行完成了错误消息。谢谢
-
好的,澄清一下:你没有得到上面代码的异常,但是你得到它如果数据数组被填充到 100 个字符串?或者如果填充四个表格列?还是仅适用于两者的结合? (当你在这里分享代码时——你总是应该这样做的!——你通常应该分享可以立即重现问题本身的代码......)
-
@mkl 美好的一天。我更新了代码。是的,如果数据数组填充了太多单列无法处理的数据,我会收到异常错误。那么我该如何解决呢?谢谢
-
您是否尝试过按照我的回答中的建议进行更新?