我正在使用ITextSharp在ASP.net中创建pdf,在我的本地机器上运行正常,当我在IIS服务器上运行时,pdf创建成功并且可以打开并查看它所在的文件夹,但是我无法以编程方式从C#打开pdf。
我正在使用Process.Start(path)
打开该文件。
PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("TransferLetter/" + filenamee), FileMode.Create));
doc.Open();
DateTime date = DateTime.Now.Date;
html = html.Replace("[Date]", Request["Date"] + "");
html = html.Replace("[Address]", Request["MailingAddress"].ToString());
html = html.Replace("[PlotNo]", Request["PlotNumber"].ToString());
html = html.Replace("[Block]", Request["Block"].ToString());
html = html.Replace("[Size]", Request["PlotSize"].ToString());
string pa = Server.MapPath("TransferLetter/" + filenamee);
System.Diagnostics.Process.Start(pa);
答案 0 :(得分:1)
这将永远不会这样。 System.Diagnostics.Process.Start()
在服务器上运行,而不是在客户端上运行。当您在本地计算机上进行开发时,您 服务器和客户端这样它似乎可以正常工作但是一旦你将这两个分开了让你失败。
再说一遍,但是以不同的方式,您要求服务器构建您的PDF,然后您指示服务器启动其本地Adobe Reader副本并将PDF显示给任何人此刻已物理登录到服务器。 (好吧,不是100%正确但非常接近。)
相反,您需要使用Response.Redirect()
或Response.Write()
之类的内容将PDF发送到客户端。查看您的代码,您应该能够执行:
Response.Redirect("TransferLetter/" + filenamee)
使用iTextSharp,您实际上甚至不必将PDF写入磁盘。您可以使用MemoryStream
代替FileStream
,在处理它之前调用MemoryStream.ToArray()
并在该字节数组上使用Response.Write()
。如果您正在编写小型PDF和/或计划多人访问,这可能是更安全的方式。
答案 1 :(得分:0)
您需要使用~
tilde
运算符来指定current project
文件夹路径
试试这个:
string pa = Server.MapPath("~/TransferLetter/" + filenamee);