none
請問有辦法在線瀏覽PDF文檔嗎??? RRS feed

  • 問題

  • 我利用ashx的Http Handler建立從資料庫讀取PDF檔案...
    然後將其變成一個超連結...
    例如這樣:
    NavigateUrl='<%# Eval("a_f_id","PdfHandler.ashx?id={0}") %>'

    結果都是提示下載對話方塊..
    要求先從Server下載到Client然後在利用電腦上的PDF Reader開啟..
    都不是形成所謂在線瀏覽PDF.....
    請問有甚麼方式才可以在線瀏覽呢?
    2009年11月26日 上午 08:31

解答

  • 你不要加 Content-Disposition,那會強制出現 "檔案下載" 對話盒 ...
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    • 已提議為解答 Shelly Chen 2009年11月26日 上午 09:10
    • 已標示為解答 Lolota Lee 2009年11月26日 上午 09:16
    2009年11月26日 上午 09:05
    版主

所有回覆

  • 不知道你所謂的在線瀏覽是指直接開啟嗎??

    adodb的偏好設定->網際網路->在瀏覽器顯示pdf 請打勾~
    My Blog:http://www.dotblogs.com.tw/alonstar
    2009年11月26日 上午 08:49
  • 你也可以試試設定 context.Response.ContentType = "application/pdf" (有點忘了 PDF 是不是這個設定...) 看看。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    2009年11月26日 上午 08:59
    版主
  • 以try過..
    沒辦法...
    在線打開其實就是以web(瀏覽器)方式觀看pdf檔...
    以下是我的ashx的Http Handler原代碼:

    using System;
    using System.Web;
    using System.Linq;
    using System.Collections.Generic;
    using System.Data.Linq;
    public class PdfHandler : IHttpHandler {
        private HttpRequest request;
        private string id;
        private DataFlynet091123DataContext dataContext;
        private Table<flynet_acc> table;
        private IQueryable<flynet_acc> queryable;
        private List<Binary> list;
        private Binary binary;
        private byte[] bytes;
        public void ProcessRequest (HttpContext context) {
            init();
            request=context.Request;
            bytes = getPdfFile(request["id"]);
            context.Response.Buffer = true;
            context.Response.Clear();
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(getFileName(request["id"]), System.Text.Encoding.UTF8) + ";");
            context.Response.BinaryWrite(bytes);
            context.Response.Flush();
            context.Response.End();
        }
    
        private void init() {
            dataContext = new DataFlynet091123DataContext();
            table=dataContext.flynet_accs;
        }
    
        private byte[] getPdfFile(string id) {
            queryable=table.Where(acc => acc.a_f_id == id);
            list=queryable.Select(acc => acc.a_f_content).ToList();
            binary=list.First();
            return binary.ToArray();
        }
    
        private string getFileName(string id) {
            queryable = table.Where(acc => acc.a_f_id == id);
            return queryable.Select(acc=>acc.a_f_name).First();
        }
        public bool IsReusable {
            get {
                return false;
            }
        }
    
    }
    2009年11月26日 上午 09:02
  • 你不要加 Content-Disposition,那會強制出現 "檔案下載" 對話盒 ...
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    除非不能打中文,否則請尊重當地語系的網友,使用中文發問或回答,這是一種基本禮貌。
    • 已提議為解答 Shelly Chen 2009年11月26日 上午 09:10
    • 已標示為解答 Lolota Lee 2009年11月26日 上午 09:16
    2009年11月26日 上午 09:05
    版主
  • 照版主說的
    ok..
    可以了...
    把這行去掉..
    context.Response.AddHeader("Content-Disposition", "attachment;   filename=" + HttpUtility.UrlEncode(getFileName(request["id"]), System.Text.Encoding.UTF8) + ";");
    
    就可以在線瀏覽了...

    2009年11月26日 上午 09:08