如何在Ghostscript.Net中使用Stream压缩PDF并减小文件体积?
直接通过Stream处理PDF压缩(无需本地文件)
可以直接基于Stream完成PDF压缩,无需将文件写入物理文件夹。核心思路是利用Ghostscript的标准输入输出流能力,配合Ghostscript.NET的重载方法直接处理流数据,处理完成后可直接将结果流上传至Azure Blob存储。
修改后的实现代码
// "buffer" 是从API请求获取的文件流 using var inputMs = new MemoryStream(); buffer.CopyTo(inputMs); inputMs.Position = 0; // 重置流位置到起始处 // 准备输出流,用于接收压缩后的PDF数据 using var outputMs = new MemoryStream(); // 初始化Ghostscript相关配置 GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(libPath); using var proc = new GhostscriptProcessor(gvi); List<string> switches = new List<string> { "-empty", "-sDEVICE=pdfwrite", "-dCompatibilityLevel=1.4", "-dPDFSETTINGS=/ebook", "-dNOPAUSE", "-dQUIET", "-dBATCH", "-sOutputFile=-" // 指定输出到标准输出,配合流重载使用 }; // 直接通过流处理PDF压缩,无需本地文件 proc.Process(switches.ToArray(), inputMs, outputMs); // 重置输出流位置,准备上传到Azure Blob outputMs.Position = 0; // 此处将outputMs上传至Azure Blob存储 // 示例:await blobClient.UploadAsync(outputMs, true);
关键改动说明
- 移除了
File.WriteAllBytes和File.OpenRead等本地文件操作,全程使用MemoryStream处理数据 - 将
-sOutputFile参数改为-,表示Ghostscript将输出写入标准输出流 - 使用
GhostscriptProcessor.Process的重载方法,直接传入输入流和输出流完成压缩处理 - 处理完成后,重置输出流位置即可直接上传至Azure Blob,无需中间文件
内容的提问来源于stack exchange,提问作者GAMD
相关产品推荐
相关产品推荐

