2010-01-22 54 views
1

當用戶點擊鏈接時,它會打開一個新窗口(因爲target =「_ blank」)會調用一個xyz.ASPX頁面,該頁面將動態創建一個PDF發票,並將其保存到數據庫中(不是物理位置),然後我需要能夠在ASPX頁面中打開PDF文件。在ASPX中查看PDF文件不是acrobat

現在發生的事情是生成PDF文件的aspx被調用,它做了它的東西,但隨後打開Acrobat來顯示發票PDF。但是,xyz.aspx頁面是空白的,不會顯示任何內容。我不喜歡這個,並希望xyz.aspx顯示PDF文件。

從我的研究中,似乎如果要在ASPX頁面中顯示PDF,您需要一個iFrame或一個自定義控件。但是,由於PDF是動態創建的,並未存儲在磁盤上,因此如何設置iFrame的源。有沒有辦法將src設置爲響應對象或其他內存中的對象?

有沒有簡單的方法來做到這一點?我不想使用自定義控件。我使用.NET 3.5和C#與母版頁和CSS主題,但我禁用它爲這個頁面。

xyz.aspx:

`<%@頁語言= 「C#」 EnableTheming = 「假」
的ContentType = 「應用/ PDF」 代碼隱藏= 「xyz.aspx.cs」 AutoEventWireup = 「真」 繼承= 「namespace1.xyz」 %>

'

個xyz.aspx.cs(會從DB中的PDF文件,然後寫到Response對象)

protected void Page_Load(object sender, EventArgs e) 
    { 
     byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId); 

     if(pdfBinaryFile != null) 

      Response.BinaryWrite(pdfBinaryFile); 

}

回答

0

查找信息上使用什麼頭這個位置:PHP header examples(內容 - 性格是我認爲重要的一個)。也許這會有所幫助。

1

查看自定義處理程序(.ashx文件)和Response.Write。

雖然你有點兒愛不釋手,因爲我不認爲他們的插件在iframe中起到了很好的作用。我會考慮一件事情,而不是顯示PDF,而是有一個HTML預覽,然後有一個鏈接,以便用戶可以下載實際的PDF。這樣做會更理智一些,因爲沒有安裝Acrobat的人會得到一個很好的「下載pdf」框,無論它是否在iframe中。 (注意我說Acrobat。有些人有PDF閱讀器,但他們的瀏覽器不是PDF閱讀器插件,比如我自己)

對於PDF下載,您只需要一個自定義的HTTP處理程序,查詢字符串告訴它他們想下載哪個PDF。 (因此,不會要求寫PDF到磁盤)

1

嘗試添加Content-Disposition: inline頭:

protected void Page_Load(object sender, EventArgs e) 
{ 
    byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId); 

    if (pdfBinaryFile != null) 
    { 
     Response.Clear(); 
     Response.ContentType = "application/pdf"; 
     Response.AppendHeader(
      "Content-Disposition", "inline; filename=\"test.pdf\""); 
     Response.BinaryWrite(pdfBinaryFile); 
     Response.End(); 
    } 
}