我正在使用 ImageMagick.NET 将 PDF 转换为 JPG。这是我的代码:
MagickReadSettings settings = new MagickReadSettings();
settings.Density = new MagickGeometry(300, 300);
using (MagickImageCollection images = new MagickImageCollection())
{
images.Read(pdfFilePathString, settings);
MagickImage image = images.AppendVertically();
image.Format = MagickFormat.Jpg;
//image.Quality = 70;
//if (image.Width > 1024)
//{
// int heightRatio = Convert.ToInt32(Math.Round((decimal)(image.Height / (image.Width / 1024)), 0));
// image.Resize(1024, heightRatio);
//}
image.Write(tempFilePathString);
image.Dispose();
}
问题是,我不断收到内存不足的异常,这发生在 image.Write() 上。这显然是由于文件大小,因为小 pdf 可以工作,但不是多页 pdf。我试图让它运行的特定文件是一个 12 页的文本 pdf。如果我发送低密度,我可以让它工作,例如 (100, 100) 工作,但质量很糟糕。
注释掉的行是我试图实施的其他一些解决方案,但是在启用的情况下,它会持续运行很长时间(几分钟)而没有结束(至少就我的耐心而言)。其中之一是降低质量,另一个是减小图像尺寸。pdf总是很大,比需要的大得多。
如果我可以在写入文件之前减小图像大小和/或质量,那就太好了。或者至少我需要能够生成质量足够好的图像而不会出现内存问题。它似乎不应该在这里出现内存问题,因为它不像文件大小是巨大的,尽管它可能仍然比图像所需的要大。我可以渲染的 12 页 pdf 大约 6-7 兆。
我正在使用 32 位 ImageMagick - 我想知道 64 位是否可以解决这个问题,但是尝试让该版本在本地环境中运行时出现了问题 - 这完全是另一个问题。
有人对我可以尝试的其他任何事情有任何想法吗?
谢谢