2014-09-18 15 views
5

Im sử dụng thư viện ImageMagick.NET cho C# và tôi muốn nhận một số thông tin từ mỗi trang trong một tài liệu .PDF. Đây là mã hiện tại của tôi:ImageMagick.NET - Hiệu suất nhanh hơn

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(); 
    } 
} 

Nhưng theo ý kiến ​​của tôi, hiệu suất thực sự rất chậm. Phải mất 4 phút cho 10 tệp PDF với 703 trang. Là một cách để làm cho nó nhanh hơn?

Trả lời

2

Bạn có thể cải thiện hiệu suất bằng cách đọc trang tệp theo trang. Nếu bạn đọc toàn bộ tập tin sẽ có 703 trang trong bộ nhớ. Máy của bạn có thể không phân bổ nhiều bộ nhớ đó và ImageMagick sau đó sẽ sử dụng đĩa để lưu trữ các pixel và điều đó sẽ làm giảm hiệu suất.

Bạn có thể chỉ định trang bạn muốn đọc với thuộc tính FrameIndex của lớp MagickReadSettings. Nếu bạn chỉ định một trang quá cao, ngoại lệ sẽ được nâng lên (yêu cầu Magick.NET 7.0.0.0005 trở lên) với thông báo cho biết bạn đang yêu cầu trang không hợp lệ. Bạn cần làm điều này vì ImageMagick không biết số trang của một tệp PDF. Dưới đây là một ví dụ về cách bạn có thể làm điều này.

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

tôi nhận được @dlemstra này: '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 -d Đồ họaAlphaBits = 4 "-r72x72" -dFirstPage = 1 -dLastPage = 1 "-sOutputFile = C:/Người dùng/hueser/AppData/Local/Temp/magick-8076Hrw5DohW7A9j% d "" -fC:/Người dùng/hueser/AppData/Local/Temp/magick-8076HtiiAHseUoOX "" -fC:/Người dùng/hueser/AppData/Địa phương/Temp/magick-8076RBbhyEkp30p_ "'(-1) @ lỗi/utility.c/SystemCommand/2053' – Mauley

+0

Bạn đang sử dụng Magick.NET 7.0.0.0005? Và vui lòng tiếp tục cuộc trò chuyện ở đây: https://magick.codeplex.com/discussions. – dlemstra

+0

Tôi đã sử dụng 7.0.0.0. – Mauley

Các vấn đề liên quan