2013-09-26 43 views
1

即時通訊使用Ghostscript通過使用命令通過java渲染圖像,但我試圖運行Ghoscript圖像從PDF使用ghost4j-0.5.0.jar與我從this網站採取它從下面的代碼呈現。爲什麼通過ghostscript API的圖像渲染需要這麼多時間?

問題是,呈現過程需要兩分多鐘才能生成一個圖像,儘管通過命令行需要一秒鐘的時間,但事情是即時通訊嘗試通過java運行每一件事情,我想停止使用imagemagick和ghostscript作爲工具,請注意,即時通訊使用ghoscript滿意,我不想使用任何其他工具,因爲它爲我提供了我所需要的圖像質量和尺寸, 我使用的代碼是:

public class SimpleRendererExample { 

public static void main(String[] args) { 
    imageRenderingFromPdf(); 
} 

public static void imageRenderingFromPdf() { 

    try { 

     PDFConverter converter = new PDFConverter(); 
     PDFDocument doc; 
     // load PDF document 
     PDFDocument document = new PDFDocument(); 
     document.load(new File("d:/cur/outputfile.pdf")); 
     // create renderer 
     SimpleRenderer renderer = new SimpleRenderer(); 
     // set resolution (in DPI) 
     renderer.setResolution(100); 
     System.out.println("started"); 
     // render 
     long before = System.currentTimeMillis(); 
     List<Image> images = renderer.render(document); 
     long after = System.currentTimeMillis(); 

     System.out.println("reder " + (after - before)/1000); 
     // write images to files to disk as PNG 
     try { 
      before = System.currentTimeMillis(); 
      ImageIO.write((RenderedImage) images.get(0), "png", new File(
        "d:/dd" + ".png")); 
      after = System.currentTimeMillis(); 

      System.out.println("write " + (after - before)/1000); 
     } catch (IOException e) { 
      System.out.println("ERROR: " + e.getMessage()); 
     } 
    } catch (Exception e) { 
     System.out.println("ERROR: " + e.getMessage()); 
    } 

    } 

回答

1

有幾件事情正在放慢'渲染'過程。

首先,它不是由於Ghostscript,Ghostscript的自我工作原理相同而是通過命令行或API執行並不重要。

速度差異是ghost4j渲染實現的結果。我剛剛檢查了ghost4j的源代碼,發現它是iText和Ghostscript實現的混合體。

那麼,如何您使用作品的代碼:

  1. 首先PDF文檔裝入,並iText的解析。
  2. 然後通過將加載的pdf文檔寫回到磁盤到一個新的地方來製作完整文檔的副本。
  3. 然後Ghostscript被初始化。
  4. 然後Ghostscript第二次加載,解析和渲染來自新地點的文檔。
  5. 對於每個頁面,Ghostscript都會調用ghost4j顯示設備回調。
  6. 對於每個顯示設備回調,ghost4j從內存中獲取柵格化頁面並將其存儲到磁盤。
  7. 結束。

周部件是iText和使用顯示設備回調。我覺得可以通過讓Ghostscript照顧光柵化結果存儲而不是從Java手動執行來獲得速度......

我想現在您可以看到爲什麼您注意到速度差異。

+0

謝謝你的解釋,但你能向我解釋這句話嗎? 「讓Ghostscript照顧光柵化結果存儲,而不是從Java手動執行」 – user1283633

+0

是的,我想說的就是簡單地調用Ghostscript.initialize(String [] args),其中args將是您的命令行參數。 – HABJAN

+0

好吧,你已經回答了我的問題:)但根據這[鏈接](http://www.ghost4j.org/coreapisamples.html)它將其轉換爲input.ps,然後顯示回調,爲什麼你認爲它那是嗎? – user1283633

相關問題