6

我使用 C# 的 ImageMagick.NET 库,我想从 .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();
    }
}

但在我看来,性能真的很慢。10 个 PDF - 703 页的文件需要 4 分钟。是一种更快获得它的方法吗?

4

1 回答 1

2

您可以通过逐页读取文件来提高性能。如果您阅读整个文件,内存中将有 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++;
} 
于 2014-10-20T11:06:09.467 回答