如何使用 iText7 在 C# 中从 MemoryStream 创建 Image 对象?

How do you create an Image object from a MemoryStream in C# using iText7?

我正在 ASP.NET-MVC v5.2 中使用 iText7。我对 iText 非常缺乏经验,而 C# 仍在尝试弄清楚这个库中的 类 是如何工作的。

假设我有一个 MemoryStream,其中包含一个图像...

MemoryStream imgStream = new MemoryStream(imgLocation);

如何使用 imgStream 创建图像对象?我正在寻找符合

的东西
Image img = new Image(imgStream);

感谢您的帮助:)

编辑:我正在尝试从 iText 创建图像而不是 System.Drawing.Image

将 MemoryStream 转换为 byte[] 并使用 GetInstance 方法

public static byte[] GetByteArray(Stream input)
{
    byte[] buffer = new byte[16*1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

然后像这样使用字节数组

var Image = Image.GetInstance(GetByteArray(imgStream));

要从位图图像创建 iText 7 Image 对象,您首先必须创建一个 ImageData 实例,然后您可以将其输入相应的 Image 构造函数之一

public Image(ImageData img);
public Image(ImageData img, float left, float bottom);
public Image(ImageData img, float left, float bottom, float width);

您通常使用相应的 ImageDataFactory 静态方法创建一个 ImageData 实例:

public static ImageData Create(byte[] bytes);
public static ImageData Create(String filename);
public static ImageData Create(Uri url);

如您所见,流没有方法。但由于您的流是 MemoryStream,您可以轻松检索图像的 byte[]。因此,

byte[] imageBytes = imgStream.ToArray();
ImageData rawImage = ImageDataFactory.Create(imageBytes);
Image image = new Image(rawImage);