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

如何在C#上传阶段减小PDF文件大小?

在C#上传前压缩PDF文件的实用方案

1. 用iTextSharp做深度压缩优化

iTextSharp是处理PDF的成熟库,针对已压缩图片的PDF,可以通过移除冗余对象、启用全压缩、优化字体嵌入来进一步减小体积:

using iTextSharp.text.pdf;
using System.IO;

public static byte[] CompressPdf(byte[] pdfBytes)
{
    using (var inputStream = new MemoryStream(pdfBytes))
    using (var outputStream = new MemoryStream())
    {
        var reader = new PdfReader(inputStream);
        var stamper = new PdfStamper(reader, outputStream)
        {
            FullCompression = true
        };

        // 清理未使用的对象,压缩流数据
        reader.RemoveUnusedObjects();
        stamper.Writer.SetFullCompression();

        stamper.Close();
        reader.Close();
        return outputStream.ToArray();
    }
}

这个方法会把PDF里的冗余资源、空白对象全部清理,同时用更高效的算法压缩流数据,适合已经处理过图片的PDF做二次瘦身。

2. 用PdfSharp剔除非必要内容

如果PDF里包含注释、表单域、编辑痕迹这类附加内容,可以用PdfSharp只保留核心页面内容:

using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using System.IO;

public static byte[] OptimizePdfWithPdfSharp(byte[] pdfBytes)
{
    using (var inputStream = new MemoryStream(pdfBytes))
    using (var outputStream = new MemoryStream())
    {
        var sourceDoc = PdfReader.Open(inputStream, PdfDocumentOpenMode.Import);
        var targetDoc = new PdfDocument();

        foreach (var page in sourceDoc.Pages)
        {
            targetDoc.AddPage(page);
        }

        targetDoc.Save(outputStream, PdfSaveOptions.FullCompression);
        return outputStream.ToArray();
    }
}

这种方式相当于重新生成一个只保留页面内容的干净PDF,能有效去掉额外的冗余数据。

3. 额外优化技巧

  • 合并重复资源:iTextSharp和PdfSharp都会自动识别并合并PDF里重复的图片、字体资源,无需额外编码。
  • 降低PDF版本兼容:如果不需要兼容旧版阅读器,将PDF保存为1.6及以上版本,支持更高效的压缩算法。
  • 清理元数据:手动移除PDF的作者、创建日志、关键字等非必要元数据,也能节省少量空间。

内容的提问来源于stack exchange,提问作者Durgarao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:12:35