2016-11-30 74 views
0

我試圖將PDF文件轉換爲圖像,但我只獲得轉換的第一頁。 繼承人我有。 後面的代碼:ImageMagick.NET僅在ASP.NET MVC中呈現PDF文件的第一頁?

[HttpPost] 
     public ActionResult UploadPdf(HttpPostedFileBase file) 
     { 
      MemoryStream target = new MemoryStream(); 
      file.InputStream.CopyTo(target); 
      byte[] data = target.ToArray(); 


      MagickReadSettings settings = new MagickReadSettings(); 
      settings.Density = new Density(300, 300); 
      MemoryStream convertedFile = new MemoryStream(); 
      List<ImageModel> model = new List<ImageModel>(); 
      using (MagickImageCollection images = new MagickImageCollection()) 
      { 
       images.Read(data,settings); // Read PDF file 
       foreach (MagickImage image in images) 
       { 
        ImageModel innerModle = new ImageModel(); 
        image.Write(convertedFile, MagickFormat.Png); 
        byte[] data2 = convertedFile.ToArray(); 
        innerModle.Image = data2; 
        model.Add(innerModle);      
       }     
      }       
      return View(model); 
     } 

視圖模型:

public class ImageModel 
    { 
     public byte[] Image{ get; set; } 
    } 

查看:

@model List<DocumentViewerPoc.Models.ImageModel> 
@foreach (var item in Model) 
{ 
    var base64 = Convert.ToBase64String(item.Image); 
    var imgSrc = String.Format("data:image/gif;base64,{0}", base64); 
    <img src="@imgSrc" /> 
} 

我嘗試使用convertedFile.Flush();但這並沒有爲我做的。我在這裏錯過了什麼? 謝謝:)

+0

我想你會需要循環您的PDF的每一頁,並把它們轉換成獨立的圖像。 – Darren

+0

images.Read(data,settings);產生2個對象(PDF轉換中的頁數相同),但兩者都具有相同的大小。我不知道該行是讀取第一頁還是讀取整個文檔。另外foreach循環應該循環遍歷圖像中的所有對象。所以我很困惑其實:/ – user3159792

+0

在你的循環中你有'image.Write(convertedFile,MagickFormat.Png);' - 這不是寫完整的PDF,因此只有1頁。所以每個圖像都是相同的轉換文件。我什麼都看不到你只寫了一頁數據 - 我不知道這個庫,就是我在你的代碼中看到的。 – Darren

回答

0

改變你的代碼下面這樣:

[HttpPost] 
    public ActionResult UploadPdf(HttpPostedFileBase file) 
    { 
     MemoryStream target = new MemoryStream(); 
     file.InputStream.CopyTo(target); 
     byte[] data = target.ToArray(); 


     MagickReadSettings settings = new MagickReadSettings(); 
     settings.Density = new Density(300, 300); 

     List<ImageModel> model = new List<ImageModel>(); 
     using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(data,settings); // Read PDF file 
      foreach (MagickImage image in images) 
      { 
       MemoryStream convertedFile = new MemoryStream(); 
       ImageModel innerModle = new ImageModel(); 
       image.Write(convertedFile, MagickFormat.Png); 
       byte[] data2 = convertedFile.ToArray(); 
       innerModle.Image = data2; 
       model.Add(innerModle);      
      }     
     }       
     return View(model); 
    }