2012-08-09 66 views
0

我需要做的是;顯示來自ASHX的MemoryStream的PDF

  1. 獲取從SharePoint
  2. 一個PDF文件申請單頁,使用PDFSharp
  3. 返回,爲視圖,並顯示該頁面

我有什麼至此爲止的;

 context.Response.ClearHeaders(); 
     context.Response.ContentType = "application/pdf";    
     context.Response.AddHeader("content-disposition", "inline; filename=Something.pdf"); 

     // Get a fresh copy of the sample PDF file from Sharepoint later on 
     string filename = @"book.pdf"; 

     // Open the file 
     PdfDocument inputDocument = CompatiblePdfReader.Open(filename, PdfDocumentOpenMode.Import); 

     PdfDocument outputDocument = new PdfDocument(); 
     outputDocument.Version = inputDocument.Version; 
     outputDocument.Info.Title = "Pages 1 to 30"; 
     outputDocument.Info.Author = "Slappy"; 

     outputDocument.AddPage(inputDocument.Pages[1]); 

     MemoryStream ms = new MemoryStream(); 
     outputDocument.Save(ms, false); 

     ms.WriteTo(context.Response.OutputStream); 

我無法弄清楚的是如何在網頁中顯示它。

我有這個;

<script src="../../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery.media.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery.metadata.js" type="text/javascript"></script> 

<script> 
    $(function() { 
     $.ajax({ url: '/GetBookPage.ashx', 
      success: function (result) { 
       $("a.media").attr('href', result); 
       $('a.media').media({ width: 800, height: 600 }); 
      }, 
      async: false 
     }); 
    }); 
</script> 

<a class="media">PDF File</a> 

上述工作,如果我將pdf保存到文件系統,然後將href指向該文件。

回答

2

通過以下處理:

public class GetBookPage : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      string filePath = @"c:\somepath\test.pdf"; 
      context.Response.ContentType = "application/pdf"; 
      context.Response.AddHeader("content-disposition", "inline; filename=test.pdf"); 
      context.Response.WriteFile(filePath); 
      context.Response.End(); 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 

我能得到的PDF內嵌顯示,如果你做到以下幾點:

<script type="text/javascript"> 
    $(function() { 
     $('a.media').media({ width: 800, height: 600 }); 
    }); 
</script> 

<a class="media" href="/GetBookPage.ashx?.pdf">PDF File</a> 

該插件使用url(或者更準確的擴展名)在頁面上構建適當的媒體容器。如果您沒有「.pdf」,它將無法按預期工作。

+0

我想你錯過了這裏的一點,或者我可能並不清楚。我在SharePoint中的PDF有100多頁,我想返回的是每個頁面的第一頁。因此使用PDFSharp並返回一個MemoryStream。 – griegs 2012-08-09 03:52:00

+0

對不起,其實你已經用href =「/ GetBookPage.ashx?.pdf」給出了答案。「這是銀色的子彈非常感謝你! – griegs 2012-08-09 03:57:24