You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:05:03