Mau*_*ley 5 c# pdf foreach magick.net
我使用ImageMagick.NET库进行C#,我希望从.PDF文档中的每个页面获取一些信息.这是我目前的代码:
var list = new MagickImageCollection();
list.Read(file.FullName);
foreach (var page in list)
{
if (!backgroundWorker.CancellationPending)
{
pageCount.pageColorspace(page);
isFormat(page.Width, page.Height);
pageCount.incPdfPages();
}
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,表现真的很慢.10张PDF需要4分钟 - 703页的文件.是一种让它更快的方法吗?
您可以通过逐页读取文件来提高性能。如果您读取整个文件,内存中将有 703 页。您的机器可能无法分配那么多内存,ImageMagick 将使用磁盘来存储像素,这会降低性能。
您可以使用 MagickReadSettings 类的 FrameIndex 属性指定要读取的页面。如果您指定的页面太高,则会引发异常(需要 Magick.NET 7.0.0.0005 或更高版本),并显示一条消息,指出您正在请求无效页面。您需要执行此操作,因为 ImageMagick 不知道 PDF 文件的页数。以下是如何执行此操作的示例。
int page = 0;
while (true)
{
MagickReadSettings settings = new MagickReadSettings()
{
FrameIndex = page
};
try
{
using (MagickImage image = new MagickImage(@"C:\YourFile.pdf", settings))
{
// Do something with the image....
}
}
catch (MagickException ex)
{
if (ex.Message.Contains("Requested FirstPage is greater"))
break;
else
throw;
}
page++;
}
Run Code Online (Sandbox Code Playgroud)