2014-09-18 27 views
5

Im utilizzando la libreria ImageMagick.NET per C# e voglio ottenere alcune informazioni da ciascuna pagina in un documento .PDF. Ecco il mio codice attuale:ImageMagick.NET - Prestazioni più veloci

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

Ma secondo me la prestazione è molto lenta. Ci vogliono 4 minuti per 10 PDF - file con 703 pagine. È un modo per farlo più velocemente?

risposta

2

È possibile migliorare le prestazioni leggendo il file pagina per pagina. Se leggi l'intero file ci saranno 703 pagine in memoria. Probabilmente la tua macchina non può allocare così tanta memoria e ImageMagick utilizzerà quindi il disco per archiviare i pixel e questo ridurrà le prestazioni.

È possibile specificare la pagina che si desidera leggere con la proprietà FrameIndex della classe MagickReadSettings. Se specifichi una pagina troppo alta verrà sollevata un'eccezione (richiede Magick.NET 7.0.0.0005 o superiore) con un messaggio che dice che stai richiedendo una pagina non valida. È necessario farlo perché ImageMagick non conosce il numero di pagine di un file PDF. Di seguito è riportato un esempio di come potresti farlo.

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

ottengo questo @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:/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

Stai utilizzando Magick.NET 7.0.0.0005? E sentiti libero di continuare la conversazione qui: https://magick.codeplex.com/discussions. – dlemstra

+0

Stavo usando 7.0.0.0. – Mauley

Problemi correlati