這是一個很一般的問題,一般我們要把PDF檔嵌在頁面的一個位置,會有兩種方式,一種是iframe,另為一種是利用<Object>標籤,以下就介紹這兩種方法:
- iframe
這種方法是無法跨網域。因此如果你的 PDF是放在另外一台主機,可利用網路芳鄰(參考我這篇)來作內部的傳輸,以下是其作法:
a. 首先我們拉一個使用masterpage的網頁,命名為default.aspx,在content裡放一個iframe
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master"
AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LiteralControlApp.Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div id="iframeOverviewDiv">
<iframe width='400' height='600' id='ifPdf' src='getPdf.aspx'></iframe>
</div>
</asp:Content>
iframe裡的src是一個getOdf.aspx,這程式會把我們要的pdf檔Response到client端
protected void Page_Load(object sender, EventArgs e)
{
String filePath ="";
//前端要顯示的檔案名稱
filePath = Request["file"];
if (filePath == "" || filePath == null) filePath = Server.MapPath("~/Pdf/test.pdf");
FileInfo TheFile = new FileInfo(filePath);
//建立HttpRespose物件
HttpResponse response = this.Context.Response;
//宣告Header 為pdf
response.AddHeader("content-disposition", "application/pdf");
response.Charset = "";
//宣告ContentType 為pdf
response.ContentType = "application/pdf";
//將檔案傳向Client
response.WriteFile(TheFile.FullName, false);
response.Flush();
response.End();
}
以上的範例如果你要搭配資料庫,可以把iframe那段用LiteralControl取代,在Server端寫iframe
在default.aspx加入Literal元件,並加入一按鈕作為打開test2.pdf
<table>
<tr>
<td>
</td>
<td>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="PDF2" />
</td>
</tr>
<tr>
<td>
<div id="iframeOverviewDiv">
<iframe width='400' height='600' id='ifPdf' src='getPdf.aspx?file=~/pdf/test.pdf'></iframe>
</div>
</td>
<td>
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</td>
</tr>
</table>
在code-behind加入動態產生iframe
protected void Button1_Click(object sender, EventArgs e)
{
string strIframeTag = "<iframe width='400' height='600' id='ifPdf2'
src='getPdf.aspx?file={0}'></iframe>";
strIframeTag = string.Format(strIframeTag, Server.UrlDecode("~/Pdf/test2.pdf"));
this.Literal1.Text = strIframeTag;
}
- <Object>標籤
新增一個按鈕在content裡,並增加code behind以下程式
protected void Button2_Click(object sender, EventArgs e)
{
// Objec標籤
string pdfOcx = "<OBJECT id='pdf1' height='600' width='400' classid='{0}' VIEWASTEXT>\n";
pdfOcx += "<PARAM NAME='_cx' VALUE='17648'>\n";
pdfOcx += "<PARAM NAME='_cy' VALUE='12462'>\n";
pdfOcx += "<param name='SRC' value='{1}'>";
pdfOcx += "</OBJECT>\n";
string strCLSID = "clsid:CA8A9780-280D-11CF-A24D-444553540000";//pdf clsid
string fileName="http://localhost/pdf/test3.pdf"; //pdf檔案位置
pdfOcx = string.Format(pdfOcx, strCLSID, fileName);
this.Literal1.Text = pdfOcx;
}
- pdfView元件
請參考
感謝分享
回覆刪除