如何在.net core web API中压缩作为流内容接收的任何文档?

r6hnlfcb  于 2023-02-20  发布在  .NET
关注(0)|答案(1)|浏览(185)

我有一个25MB的PDF文档作为一个请求参数作为FileStrem接收,我想压缩或减少它的大小。我如何在.net 6中实现这一点?
我试过GzipStream压缩它,但它不工作.

lmvvr0a8

lmvvr0a81#

GzipStream仅用于压缩和解压缩GZIP格式的文件。
如果你想压缩你的pdf文档,你可以使用PdfSharp和DotnetZip包,这是免费的和开源的。
示例:

public static void CompressPdf(string inputFilePath, string outputFilePath)
{
    // Load the input PDF document
    using (var inputStream = File.OpenRead(inputFilePath))
    {
        var pdfDocument = PdfReader.Open(inputStream, PdfDocumentOpenMode.Import);

        // Create a new, empty output PDF document
        var outputDocument = new PdfDocument();

        // Compress each page of the input document and add it to the output document
        foreach (var page in pdfDocument.Pages)
        {
            using (var stream = new MemoryStream())
            {
                // Save the page to a stream
                page.Save(stream, false);

                // Compress the stream using DotNetZip
                stream.Position = 0;
                var compressedStream = new MemoryStream();
                using (var zip = new ZipFile())
                {
                    zip.AddEntry("Page" + page.PageNumber.ToString(), stream);
                    zip.Save(compressedStream);
                }

                // Create a new PDF page from the compressed stream and add it to the output document
                compressedStream.Position = 0;
                var compressedPage = PdfReader.Open(compressedStream, PdfDocumentOpenMode.Import).Pages[0];
                outputDocument.AddPage(compressedPage);
            }
        }

        // Save the compressed PDF document to the output file
        using (var outputStream = File.Create(outputFilePath))
        {
            outputDocument.Save(outputStream);
        }
    }
}

相关问题