PDFiumSharp PDF 到图像大小
PDFiumSharp PDF to Image size
我正在使用 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 用于预览目的,而不是用于打印。所以较低的分辨率或质量是可以的。
当您调用 bitmap.Save(...)
时,放入 MemoryStream stream
的结果 byte[]
表示一个 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();
}
我正在使用 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 用于预览目的,而不是用于打印。所以较低的分辨率或质量是可以的。
当您调用 bitmap.Save(...)
时,放入 MemoryStream stream
的结果 byte[]
表示一个 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();
}