1

我正在使用 PDFiumSharp 从 PDF 文件生成 JPG。这是我的代码:

using (WebClient client = new WebClient())
{
    byte[] pdfData = await client.DownloadDataTaskAsync(pdfUrl);

    using (var doc = new PdfDocument(pdfData))
    {
        int i = 0;
        foreach (var page in doc.Pages)
        {
            using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, true))
            using (var stream = new MemoryStream())
            {
                page.Render(bitmap);
                bitmap.Save(stream);
                ...
                i++;
            }
        }
    }
}

代码运行良好,图像生成准确。但是,每个 JPG 大约 2mb。使用多页 PDF,整体图像大小会迅速增加。有什么办法可以减小 JPG 文件的大小?我只需要 JPG 用于预览目的,而不是用于打印。所以较低的分辨率或质量很好。

4

1 回答 1

1

当您调用bitmap.Save(...)时,byte[]放入 中的结果MemoryStream stream代表 BMP。您应该自己将其转换为 JPG。

    public static byte[] Render(PdfDocument pdfDocument, int pageNumber, (int width, int height) outputSize)
    {
        var page = pdfDocument.Pages[pageNumber];

        using var thumb = new PDFiumBitmap((int)page.Width, (int)page.Height, false);
        page.Render(thumb);

        using MemoryStream memoryStreamBMP = new();
        thumb.Save(memoryStreamBMP);

        using Image imageBmp = Image.FromStream(memoryStreamBMP);

        using MemoryStream memoryStreamJPG = new();
        imageBmp.Save(memoryStreamJPG, ImageFormat.Jpeg);

        return memoryStreamJPG.ToArray();
    }
于 2022-01-13T11:08:08.770 回答