首先你将需要 Cyotek.GhostScript 与 Cyotek.GhostScript.PdfConversion.zip
定位 gsdll32.dll 为了能让程序正常运行, gsdll32.dll需要放置在你的应用程序路径下。可能在你的Windows 32位系统的 system32文件夹,也可能在Windows 64位系统的 SysWOW64文件夹。1,先创建一个 ASP.NET Web应用程序。然后打开 Default.aspx 添加以下代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GhostScriptWebTest._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>PDF Conversion Example</title> </head> <body> <form id="form1" runat="server"> <div> <p> <asp:LinkButton runat="server" ID="previousLinkButton" Text="Previous" OnClick="previousLinkButton_Click" /> <asp:LinkButton runat="server" ID="nextLinkButton" Text="Next" OnClick="nextLinkButton_Click" /> </p> <p> <asp:Image runat="server" ID="pdfImage" ImageUrl="~/PdfImage.ashx?fileName=sample.pdf&page=1" /> </p> </div> </form> </body> </html>
整段代码应该很好理解,唯一有意思的就是那个 pdfImage 的Image控件,此控件会调用一个Http handler,也就是我下一部分将讲解的内容。
请注意到 pdfImage 控件是指向到一个 sample.pdf 文件的,所以你在向网站的根目录添加任意pdf文件时请确保pdf文件的 Build Action 被设置为 Content,否则会无效。
如何配合IHttpHandler创建图像处理的问题你在网络上可以找到一大堆技术文章,所以我这里就不多说了。注意我下面的代码是以添加了 GhostScript.dll 作引用为前提的。
using System; using System.Drawing; using System.Drawing.Imaging; using System.Web; using Cyotek.GhostScript.PdfConversion; namespace GhostScriptWebTest { public class PdfImage : IHttpHandler { public void ProcessRequest(HttpContext context) { string fileName; int pageNumber; Pdf2Image convertor; Bitmap image; fileName = context.Server.MapPath("~/" + context.Request.QueryString["fileName"]); pageNumber = Convert.ToInt32(context.Request.QueryString["page"]); // convert the image convertor = new Pdf2Image(fileName); image = convertor.GetImage(pageNumber); // set the content type context.Response.ContentType = "image/png"; // save the image directly to the response stream image.Save(context.Response.OutputStream, ImageFormat.Png); } public bool IsReusable { get { return true; } } } }
现在我们能显示PDF了,但是还需要一些基本的导航。打开 Default.aspx.cs 然后添加以下代码
using System; using System.Collections.Specialized; using System.Web; using Cyotek.GhostScript.PdfConversion; namespace GhostScriptWebTest { public partial class _Default : System.Web.UI.Page { protected void previousLinkButton_Click(object sender, EventArgs e) { this.IncrementPage(-1); } protected void nextLinkButton_Click(object sender, EventArgs e) { this.IncrementPage(1); } private void IncrementPage(int increment) { NameValueCollection queryString; int pageNumber; string pdfFileName; Pdf2Image converter; queryString = HttpUtility.ParseQueryString(pdfImage.ImageUrl.Substring(pdfImage.ImageUrl.IndexOf("?"))); pdfFileName = queryString["fileName"]; pageNumber = Convert.ToInt32(queryString["page"]) + increment; converter = new Pdf2Image(this.Server.MapPath("~/" + pdfFileName)); if (pageNumber > 0 && pageNumber <= converter.PageCount) pdfImage.ImageUrl = string.Format("~/PdfImage.ashx?fileName={0}&page={1}", pdfFileName, pageNumber); } } }
很明显,只需要通过更改页码我们就能得到需要的成果了。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务