我开发了一个能够生成PDF文件的webapp。用户可以选择上传最多5张图片。当用户上传5张图片时,我将能够生成PDF文件。但是,如果用户只选择上传4,我将无法生成PDF文件,我将收到此错误。
Index was outside the bounds of the array
如果用户没有上传所有5张图片,我已经将默认值'0x'作为varbinary插入。这是关于我如何直接从我的SQL服务器获取图像的代码。
phrase.Add(new Chunk("C-IMG1 :\u00a0", normalFont));
Byte[] bytes1 = (Byte[])dr[8];
iTextSharp.text.Image image1 = iTextSharp.text.Image.GetInstance(bytes1);
image1.ScaleToFit(112f, 112f);
Chunk imageChunk1 = new Chunk(image1, 0, 0);
phrase.Add(imageChunk1);
phrase.Add(new Chunk("C-IMG2 :\u00a0", normalFont));
Byte[] bytes2 = (Byte[])dr[9];
iTextSharp.text.Image image2 = iTextSharp.text.Image.GetInstance(bytes2);
image2.ScaleToFit(112f, 112f);
Chunk imageChunk2 = new Chunk(image2, 0, 0);
phrase.Add(imageChunk2);
phrase.Add(new Chunk("C-IMG3 :\u00a0", normalFont));
Byte[] bytes3 = (Byte[])dr[10];
iTextSharp.text.Image image3 = iTextSharp.text.Image.GetInstance(bytes3);
image3.ScaleToFit(112f, 112f);
Chunk imageChunk3 = new Chunk(image3, 0, 0);
phrase.Add(imageChunk3);
phrase.Add(new Chunk("C-IMG4 :\u00a0", normalFont));
Byte[] bytes4 = (Byte[])dr[11];
iTextSharp.text.Image image4 = iTextSharp.text.Image.GetInstance(bytes4);
image4.ScaleToFit(112f, 112f);
Chunk imageChunk4 = new Chunk(image4, 0, 0);
phrase.Add(imageChunk4);
phrase.Add(new Chunk("C-IMG5 :\u00a0", normalFont));
Byte[] bytes5 = (Byte[])dr[12];
iTextSharp.text.Image image5 = iTextSharp.text.Image.GetInstance(bytes5);
image5.ScaleToFit(112f, 112f);
Chunk imageChunk5 = new Chunk(image5, 0, 0);
phrase.Add(imageChunk5);
我该如何解决这个问题?已经被困了一两天。
答案 0 :(得分:0)
您要求iTextSharp从空字节创建图像,这将导致错误,您需要添加一些代码来处理空图像案例。我发布了your other thread,我建议切换到PdfPTable
这样可以让您的生活更轻松。但是,如果您要继续沿Phrase
/ Chunk
路径继续,那么如果找不到图像,或者让您的代码插入“默认图像”,则SQL Server将返回有效的“默认图像” ”
例如,从SQL Server中你可以返回smallest transparent image possible,如果我正确转换它将是:{/ p>
0x47494638396101000100800000ffffff00000021f90400000000002c00000000010001000002024401003b
或者从.Net中你可以生成一个简单的空白图像或从磁盘加载一个。
此外,如果您只是将所有内容都移动到循环中,那么您的代码可以简化:
//Loop through the 5 images
for (int i = 0; i < 5; i++) {
//Output the image with the current index (adding 1 since we're starting at zero)
phrase.Add(new Chunk("C-IMG" + (i + 1).ToString() + " :\u00a0", normalFont));
//It appears 8 is the "magic number" of the column so add whatever index we're currently on
Byte[] bytes = (Byte[])dr[8 + i];
if (bytes.Length == 0) {
//Do something special with the empty ones
} else {
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(bytes);
image.ScaleToFit(112f, 112f);
Chunk imageChunk = new Chunk(image, 0, 0);
phrase.Add(imageChunk);
}
}