2014-09-18 5 views
5

Я использую библиотеку ImageMagick.NET для C#, и я хочу получить некоторую информацию с каждой страницы в документе .PDF. Вот мой текущий код:ImageMagick.NET - более высокая производительность

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 минуты. Является ли способ получить его быстрее?

ответ

2

Вы можете улучшить производительность, прочитав файл за страницей. Если вы прочитаете весь файл, в памяти будет 703 страницы. Возможно, ваша машина не выделяет столько памяти, и ImageMagick будет использовать диск для хранения пикселей, что уменьшит производительность.

Вы можете указать страницу, которую хотите прочитать, с помощью свойства FrameIndex класса MagickReadSettings. Если вы укажете слишком высокую страницу, будет добавлено исключение (требуется 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++; 
} 
+0

Я получаю эту @dlemstra: 'JPGATTREXC-2.vshost.exe: FailedToExecuteCommand "C:/Program Files (x86) /gs/gs9.15/bin/gswin32c.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap = 500000000 -dAlignToPixels = 0 -dGridFitTT = 2 "-sDEVICE = pngalpha" -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 "-r72x72" -dFirstPage = 1 -dLastPage = 1 "-sOutputFile = C:/Пользователи/hueser/AppData/Local/Temp/magick-8076Hrw5DohW7A9j% d "" -fC:/Пользователи/hueser/AppData/Local/Temp/magick-8076HtiiAHseUoOX "" -fC:/Пользователи/hueser/AppData/Local/Temp/magick-8076RBbhyEkp30p_ "'(-1) @ error/utility.c/SystemCommand/2053' – Mauley

+0

Вы используете Magick.NET 7.0.0.0005? И не стесняйтесь продолжать разговор здесь: https://magick.codeplex.com/discussions. – dlemstra

+0

Я использовал 7.0.0.0. – Mauley

Смежные вопросы