将 PDF 转换为图像字节数组以保存到数据库

问题描述

我想要完成的是允许我的用户上传 PDF。然后我会将其转换为 Image 并获取 Images 字节数组。以下是我目前所拥有的。

PdfDocumentProcessor pdfDocumentProcessor = new PdfDocumentProcessor();
using (MemoryStream ms = new MemoryStream(e.UploadedFile.FileBytes))
{

    pdfDocumentProcessor.LoadDocument(ms);

    for (int i = 1; i <= pdfDocumentProcessor.Document.Pages.Count; i++)
    {
        Bitmap image = pdfDocumentProcessor.CreateBitmap(i,1000);

        try
        {
            image.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
        }
        catch (Exception error)
        {
            string message = error.Message;
        }
 }

当我尝试将图像保存到内存流时,我收到错误GDI+ 中发生一般错误”我相信这与我没有为图像指定路径有关被保存到,但我可能弄错了。

我想将PDF转换为和图像,然后获取图像的字节数组,并将其保存到数据库中。我真的不想把图片保存到指定路径。

PDFDocumentProcessor 是一个 DevExpress 类,它拉入 PDF 并且还会给我 PDF 的字节数组,但我似乎无法找到解决保存错误方法来检索图像字节数组

感谢任何帮助,谢谢

解决方法

该问题很可能是由于您尝试重新使用保存输入文件字节的同一个 MemoryStream 引起的。您应该创建一个新的内存流来保存。

我无权访问 devexpress,但我获取了另一个与 https://www.nuget.org/packages/Leadtools.Pdf/ 关联的 Nuget 包并对其进行了测试,此代码可将 PDF 保存到 PNG 内存流:

using (var ms = new MemoryStream(fileBytes))
using (var codecs = new RasterCodecs())
{
   codecs.Options.Load.AllPages = true;
   using (var rasterImage = codecs.Load(ms))
   using (var outputStream = new MemoryStream())
      codecs.Save(rasterImage,outputStream,RasterImageFormat.Png,0);
}