1

嗨,所有聪明的家伙,

我在这里面临一些挑战。我应该创建几个包含多个(不相似)图像的不同 PDF。

不幸的是,有些图像已损坏/缺陷。这会导致特定 PDF 的创建失败/转储。

有没有办法在创建 PDF 之前测试图像?

请对我温柔一点。我不是专家。

我发现 System.Drawings.Image 可以测试一些格式。我猜总比没有好(它会显着减少子集)。

但是当使用 iTextSharp.text.Image 创建 PDF 时。然后我不知道如何使用the System.Drawings.Image,因为当我尝试时Image newImage = Image.FromFile("SampImag.jpg");它(图像)指的是iTextSharp.text.Image类。

System.Drawings.Image 是抽象的,所以我尝试创建一个子类。

public class ImageTest : System.Drawing.Image
    {

    }

现在我收到错误消息:"Error 1 The type 'System.Drawing.Image' has no constructors defined" 尝试调查我可以使用哪些构造函数给了我这个尝试。

public class ImageTest : System.Drawing.Image
    {
      ImageTest(string filename);
      {
      }
    }

但这不起作用。

如果您需要与您调查此事相关的信息,请通知我。

提前致谢。

4

2 回答 2

2

你应该可以使用

public bool IsValidImageFile (string imageFile)
{
    try
    {
        // the using is important to avoid stressing the garbage collector
        using (var test = System.Drawing.Image.FromFile(imageFile))
        {
             // image has loaded and so is fine
             return true;
        }
    }
    catch
    {
        // technically some exceptions may not indicate a corrupt image, but this is unlikely to be an issue
        return false;
    } 
}
于 2016-06-29T09:00:24.870 回答
1

Catch OutOfMemoryException 有效:

try
{
    // Using System.Drawing.Image
    System.Drawing.Image img = (System.Drawing.Bitmap)System.Drawing.Image.FromFile("myimage.png");
}
catch (OutOfMemoryException ex)
{
    // Handle the exception...
}

我用这段代码测试了它:

try
{
    System.Drawing.Image img = (System.Drawing.Bitmap)System.Drawing.Image.FromFile("myimage.png");
}
catch (OutOfMemoryException ex)
{
    Console.WriteLine("Error loading image...");
}

我删除了一个.png文件中的几个字符,控制台说:

加载图片时出错...

并将其转换为iTextSharp.text.Image

于 2016-06-29T08:54:11.890 回答