2012-04-30 44 views
2

我可以將PDF頁面轉換爲圖像。如果它少於50頁,它的工作速度很快...... 如果任何pdf大於1000頁...它需要很多時間才能完成。 我已經在.NET3.5 這裏使用PdfLibNet DLL(不會在4.0的)任何一個可以查看這些代碼,使之成爲大型文件工作... 是我的示例代碼:將pdf頁面轉換爲1000以上的圖像

public void ConverIMG(string filename) 
    {   
     PDFWrapper wrapper = new PDFWrapper(); 
     wrapper.RenderDPI = Dpi; 
     wrapper.LoadPDF(filename); 
     int count = wrapper.PageCount; 
     for (int i = 1; i <= wrapper.PageCount; i++) 
     { 
      string fileName = AppDomain.CurrentDomain.BaseDirectory + @"IMG\" + i.ToString() + ".png"; 
      wrapper.ExportJpg(fileName, i, i, (double)100, 100); 
      while (wrapper.IsJpgBusy) 
      { 
       Thread.Sleep(50); 
      } 
     } 
     wrapper.Dispose();    
    } 

PS: 我們需要拆分頁面並平行轉換爲圖像,我們需要獲得完整的狀態。 number of pages and time consumption

+2

好的,是的。對於一個:Thread.Sleep(50);?那是什麼。如果您爲1000個頁面中的每一個頁面輸入一次該塊,則只需50秒。你爲什麼要這樣做? PDFWrapper在單獨的線程中運行? – aquinas

+0

你的Thread.Sleep(50)真的需要嗎?你能降低睡眠時間嗎?目前,您的時間花費了5%的時間。 – KingCronus

+0

如果ExportJpg很忙,同時將PDF轉換爲圖像,我宣佈要等待50毫秒... –

回答

1

如果PDFWrapper對於大於50頁的文檔而言性能會下降,這表明它不是很好編寫。爲了克服這個問題,你可以在50個批次中進行轉換,並在每個批次後重新創建PDFWrapper。有一個假設ExportJpg()隨着調用次數變慢,其初始速度不取決於PDF的大小。

這只是對PDFWrapper中的明顯問題的解決方法,適當的解決方案是使用固定的庫。如果你真的需要等待並屈服,我會建議Thread.Sleep(1)

public void ConverIMG(string filename) 
{ 
    PDFWrapper wrapper = new PDFWrapper(); 
    wrapper.RenderDPI = Dpi; 
    wrapper.LoadPDF(filename); 
    int count = wrapper.PageCount; 
    for (int i = 1; i <= count; i++) 
    { 
     string fileName = AppDomain.CurrentDomain.BaseDirectory + @"IMG\" + i.ToString() + ".png"; 
     wrapper.ExportJpg(fileName, i, i, (double) 100, 100); 
     while (wrapper.IsJpgBusy) 
     { 
      Thread.Sleep(1); 
     } 

     if (i % 50 == 0) 
     { 
      wrapper.Dispose(); 
      wrapper = new PDFWrapper(); 
      wrapper.RenderDPI = Dpi; 
      wrapper.LoadPDF(filename); 
     } 
    } 
    wrapper.Dispose(); 
} 
+0

@maciej ..我不明白你的代碼if(count%50 == 0) { wrapper.Dispose(); wrapper = new PDFWrapper(); }如果我們初始化新的對象包裝器= new PDFWrapper();我們需要加載PDF文件嗎?看,我正在尋找並行處理.... –

+0

正確。更新了代碼。並行處理也是一個好主意,但並不是很快就能實現。 –