2015-05-14 23 views
0

我有一個網頁,顯示圖像的用戶。顯示屏旨在確認用戶已上傳適當的文檔。由於安全要求,我決定將圖像嵌入到html中(這樣可以使所有圖像具有相同的URL)。我的應用程序允許使用幾種不同類型的文件,但我的問題是使用pdf文件。如何閱讀使用GhostScript.NET整個PDF

我使用Ghostscript.NET和Ghostscript來閱讀我的pdf並將它們轉換爲圖像,以便我可以嵌入它們。我的Ghostscript實現正在讀取文件,但我只能顯示第一頁。我的問題:如何在一頁或多頁上顯示整個pdf?

我曾嘗試:

do 
      { 
       img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber); 
       img.Save(ms, ImageFormat.Png); 
       imageBytes = ms.ToArray(); 
       returnString += Convert.ToBase64String(imageBytes); 
       pageNumber++; 

      } while (pageNumber <= _rasterizer.PageCount); 

      _rasterizer.Close(); 
      ms.Close(); 

      return returnString; 

上述實施產生了非常大的字符串,但網頁上的「破碎的形象」圖標顯示。

 do 
     { 
      img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber); 
      img.Save(ms, ImageFormat.Png); 
      imageBytes = ms.ToArray(); 
      Session["NextPage"] = Convert.ToBase64String(imageBytes); 

      if (pageNumber > 1) 
      {     
       Response.Write("<script>"); 
       Response.Write("window.open('ImageDisplayMultiPage.aspx')"); 
       Response.Write("<" + "/script>"); 
      } 
      else 
      { 
       Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"]; 
      } 

      pageNumber++; 

     } while (pageNumber <= _rasterizer.PageCount); 

     _rasterizer.Close(); 
     ms.Close(); 

此實現成功打開等於文檔中的頁面數量窗戶,但會顯示在所有,但一個網頁上的PDF格式的第一頁。剩餘的網頁顯示'破碎的圖像'圖標。僅供參考此方法打開使用的網頁:

Image3.ImageUrl = "data:image/png;base64," + Session["NextPage"]; 

寫入它的頁面,它已正確設置。

此外,目標是將整個pdf轉換爲base64字符串。它可以顯示在多個頁面上,也可以顯示在一個頁面上。你知道如何做到這一點?

上傳到5MB文件大小是有限的,我猜最大的pdf將是5頁,但這不是一個問題。

回答

0

我最終不得不在循環結束時關閉光柵化器,並在循環開始時重新打開光柵化器。此實現正在工作:

 List<string> pagesOfPDF = new List<string>(); 

     MemoryStream ms = new MemoryStream(); 
     _rasterizer.Open(inputPdfPath, localDllInfo, false); 
     int numberOfPages = _rasterizer.PageCount; 
     _rasterizer.Close(); 

     for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) 
     { 
      _rasterizer.Open(inputPdfPath, localDllInfo, false); 
      ms = new MemoryStream(); 
      img = null; 
      string returnString; 
      img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber); 
      img.Save(ms, ImageFormat.Png); 
      imageBytes = ms.ToArray(); 

      returnString = Convert.ToBase64String(imageBytes); 
      pagesOfPDF.Add(returnString); 
      ms.Close(); 
      _rasterizer.Close(); 
     } 

     foreach (string image in pagesOfPDF) 
     { 
      imageDisplay.Controls.Add(new HtmlImage() 
      { 
       Src = "data:image/png;base64," + image, 
       Alt = "" 
      }); 
     } 

     ms.Close();