代码改变世界

[外文翻译]Embed PDF in Web pages ( asp.net 2.0)

2007-09-27 20:15  水随风  阅读(2578)  评论(3编辑  收藏  举报

 

==========keywords========waterlion====pdf=========asp.net========Embed PDF in Web pages====================
介绍   

这篇文章叙述了一种方式去使用asp.net2.0自定义服务器控件,将PDF文档嵌入并显示到web页面中。这表示允许开发者有机会去控制网页显示PDF。这与直接链接到PDF使用完整的页面显示PDF相比,更容易让开发人员去控制页面显示。

开始

         在下载的文件中包含两个解决方案,一个是包含提供PDF的浏览功能的自定义控件的自定义类库,另一个是使用控件显示pdfweb网站。

         在解决方案中显示项目,那个项目会显示一个测试的web网站,它只包含一个单独的网页(default.aspx)和一个pdf文件,下面的那个项目是自定义控件类库(showpdf),将自定义控件类库包含到网站内,另外还要包含

System.Design;

网页自定义控件项目

         在这个web自定义项目里有一个自定义控件,这个例子命名为showpdf.cs.项目代码是非常简单而且花了很少的时间去完成了它,在控件代码中要引用下面的命名空间:

         Using System;

         Using System.Collection.Generic;

         Using System.ComponentModel;

         Using System.Text;

         Using System.Web;

         Using System.web.UI;

         Using System.web.UI.WebControls;

         Namespace PdfViewer

{

         [DefaultProperty(“FilePath”)]

         [ToolboxData(“<{0}:ShowPdf>”)]

Public class ShowPdf:WebControl

{

下面导入命名空间和类定义,类包含一个属性名称为”FilePath”是类属性的默认属性。当控件被拖拽到网页上,属性编辑者会去选择这些开发者需要的属性,在设计的时候完成这些非常简单。自定义控件被安装到工具箱中。在类被定义后,部分的定义被增加还有一个本地成员变量被定义都包含在这块代码块中。本地变量用于设置PDF加载到控件的路径。

#region

 Private string mFilePath;

#endregion

         在下面的代码中包含着一个叫“ProPerties”的新的代码块。在这里有一个名为FilePath的属性。属性被用于提供公共成员访问文件路径成员。

#region "Properties"

        [Category("Source File")]

        [Browsable(true)]

        [Description("Set path to source file.")]

        [Editor(typeof(System.Web.UI.Design.UrlEditor), typeof(System.Drawing.Design.UITypeEditor))]

        public string FilePath

        {

            get

            {

                return mFilePath;

            }

            set

            {

                if (value == string.Empty)

                {

                    mFilePath = string.Empty;

                }

                else

                {

                    int tilde = -1;

                    tilde = value.IndexOf('~');

                    if (tilde != -1)

                    {

                        mFilePath = value.Substring((tilde + 2)).Trim();

                    }

                    else

                    {

                        mFilePath = value;

                    }

                }

            }

        }   // end FilePath property

#endregion

注意在属性的设置部分,如果文件路径存在“~”那么代码会一处文件路径前面的“~”,使用url editor后设置文件路径属性“~”原封不动的话,那个“~”会伴随显示到HTML中,带来的是该PDF找不到。在设计初期,很有必要从文件路径字符串中去除这个字符为了保证Url Editor设置这些属性。

        完成这个控件需要最后一个叫做“Rendering”的代码段,这个代码段包含了一个简单的方法,用于重写
RenderContents方法。在RenderContents中,一个字符串构造器被创建而且用于HTML去为控件提供试图显示到
页面上。在这个例子中,最简单的方式去显示PDF是通过Iframe虚框架。通过字符串构造器看出虚框架包含代码控
件本身.在字符串构造器被赋予后,内容被装进了DIV内。整个的控件在一个try…catch的代码块中被创建。如果
try失败了,那么catch会用“DisPlay PDF Control”来替代控件显示到网页的BOX中 

protected override void RenderContents(HtmlTextWriter

                                       writer)

{

    try

    {

        StringBuilder sb = newStringBuilder();

        sb.Append("<iframe src="

                  +FilePath.ToString() + " ");

        sb.Append("width=" +

                  Width.ToString() + " height=" +

                  Height.ToString() + " ");

        sb.Append("<View PDF: <a

            href=" + FilePath.ToString() + "</a></p>

            ");

        sb.Append("</iframe>");

              

        writer.RenderBeginTag(HtmlTextWriterTag.Div);

        writer.Write(sb.ToString());

        writer.RenderEndTag();

    }

    catch

    {

              

        // with no properties set, this will render

        // "Display PDF Control" in

        // a box on the page

        writer.RenderBeginTag(HtmlTextWriterTag.Div);

        writer.Write("Display PDF Control");

        writer.RenderEndTag();    

    } // end try-catch

}   //

end RenderContents

#endregion

网站测试项目

        代码页:default.aspx 页

        在web项目中的默认网页(default.aspx)被使用了那个pdf控件去测试。那个页面只有一个Panle作为横幅,一个超链接指向PDF文件,还有一个包含文件路径属性的自定义控件,它也指向PDF。那个PDF被添加到那个网站项目的网页中。当这个网页被浏览,控件就会在定义的区域显示PDF文档,选择超链接会打开同一个PDF到另一个分开的窗体。

==========keywords========waterlion====pdf=========asp.net========Embed PDF in Web pages====================




代码下载 :http://www.codeproject.com/aspnet/EmbedPDFinWebpages/PdfControl.zip

#region "Rendering"