2016-11-30 4 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); 
    } 
関連する問題