2014-09-18 2 views
5

C# 용 ImageMagick.NET 라이브러리를 사용하여 .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(); 
    } 
} 

그러나 내 opinon에서 성능이 정말 느립니다. 703 페이지의 PDF 파일 10 개에 대해 4 분이 소요됩니다. 더 빨리 할 수있는 방법이 있습니까?

답변

2

페이지별로 파일을 읽으면 성능을 향상시킬 수 있습니다. 전체 파일을 읽으면 703 페이지가 메모리에 저장됩니다. 컴퓨터가 그만큼의 메모리를 할당하지 못하고 ImageMagick이 디스크를 사용하여 픽셀을 저장하면 성능이 저하됩니다.

MagickReadSettings 클래스의 FrameIndex 속성을 사용하여 읽을 페이지를 지정할 수 있습니다. 너무 높은 페이지를 지정하면 잘못된 페이지를 요청한다는 메시지와 함께 예외가 발생합니다 (Magick.NET 7.0.0.0005 이상 필요). ImageMagick은 PDF 파일의 페이지 수를 알지 못하므로이 작업을 수행해야합니다. 아래는 당신이 이것을 할 수있는 방법의 예입니다. `JPGATTREXC-2.vshost.exe을 :

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을 얻을 FailedToExecuteCommand "C :/프로그램 파일 (86) /gs/gs9.15/bin/gswin32c.exe"-q -dQUIET -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 "-r72x72"-dFirstPage = 1 -dLastPage = 1 "-sAutputFile ="-dTextAlphaBits = 4 "-dFirstPage = 1 -dLastPage = 1" C :/Users/hueser/AppData/Local/Temp/magick-8076Hrw5DohW7A9j % d ""-fC :/Users/hueser/AppData/Local/Temp/magick-8076HtiiAHseUoOX "-fC :/Users/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

관련 문제