首页 文章

大型PDFsharp(MigraDoc)PdfDocument到byte []

提问于
浏览
0

我一直试图使用各种方法将大型PdfDocument保存到字节数组中,但总是回到内存不足异常(文件是200 MB和2.5K页) .

我最初的尝试是简单地使用MemoryStream

public static byte[] ProcessLargePdfDocument(PdfDocument pdfDocument)
{
    using (MemoryStream stream = new MemoryStream())
    {
        pdfDocument.Save(stream, true);
        return stream.ToArray();
    }
}

然后我尝试添加一些缓冲

public static byte[] ProcessLargePdfDocument(PdfDocument pdfDocument, long whereToStartReading = 0)
{
    List<byte> byteList = new List<byte>();

    using (MemoryStream stream = new MemoryStream())
    {
        pdfDocument.Save(stream, false);
        byte[] buffer = new byte[megabyte];
        stream.Seek(whereToStartReading, SeekOrigin.Begin);
        int bytesRead = stream.Read(buffer, 0, megabyte);
        while (bytesRead > 0)
        {
            byteList.AddRange(buffer);
            bytesRead = stream.Read(buffer, 0, megabyte);
        }
    }

    return byteList.ToArray();
}

无论我尝试什么,我都会在pdfDocument.Save调用中获得内存不足异常 . 我能够将它写入文件位置并使用dev中的缓冲FileStream将其读回,但由于权限(但尚未),我无法在 生产环境 环境中执行此操作 .

1 回答

  • 1

    两个提示:

    确保您的进程作为64位进程运行,以允许它使用超过2 GiB的RAM .

    stream.ToArray() 创建一个副本, stream.GetBuffer() 允许您访问 MemoryStream 的内部缓冲区 . 如果在 Save() 之后发生异常,这可能会产生影响 .

相关问题