【问题标题】:Large PDFsharp (MigraDoc) PdfDocument to byte[]大型 PDFsharp (MigraDoc) PdfDocument 到字节 []
【发布时间】:2017-08-03 11:51:36
【问题描述】:

我一直在尝试使用各种方法将大型 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 将其读回,但由于权限(还),我无法在生产环境中执行此操作。

【问题讨论】:

    标签: c# arrays pdf pdfsharp migradoc


    【解决方案1】:

    两个提示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多