无法使用';生成PDF文件;0x';varbinary值ASP.net itextsharp

本文关键字:varbinary itextsharp net 0x ASP 生成 PDF 文件 | 更新日期: 2023-09-27 18:19:50

我开发了一个能够生成PDF文件的Web应用程序。用户可以选择上传最多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);

我该如何解决这个问题?已经被困了一两天了。

无法使用';生成PDF文件;0x';varbinary值ASP.net itextsharp

如果您要求iTextSharp从空字节创建图像,这将导致错误,您需要添加一些代码来处理空图像的情况。我在你的另一个帖子中发帖说,我建议为此切换到PdfPTable,这会让你的生活更轻松。但是,如果您要继续沿着Phrase/Chunk路径,那么如果找不到映像,请让SQL Server返回一个有效的"默认映像",或者让您的代码插入一个"默认图像"。

例如,从SQL Server中,您可以只返回最小的透明图像,如果我正确转换,它将是:

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);
    }
}