C#添加到自定义应用程序页面代码后面找不到文件

时间:2013-02-15 21:15:55

标签: sharepoint sharepoint-2010

我在SharePoint 2010中有一个自定义应用程序页面。一切正常,直到我在后面的代码中放入一段C#代码。当我添加:

Document document = new Document();
document.LoadFromFile(@"C:\TestFolder\MYDOC.DOC");

document.SaveToFile(@"C:\Files\MYDOC.PDF", FileFormat.PDF);

当我添加此代码时,我收到此错误:

File Not Found

此自定义应用程序页面使用名为Spire.Doc的第三方PDF dll。该DLL被添加到包中,即使在上面的代码不存在时DLL在包中也没有出现错误。仅当上述代码位于自定义应用程序页面后面的代码中时才会发生错误。有任何想法吗?我完全陷入困境。

谢谢!

2 个答案:

答案 0 :(得分:1)

可能有很多原因导致此错误。

首先尝试查看SharePoint日志,您可以在其中找到有关stacktrace的更多扩展诊断信息。它将允许您确保错误是由此特定代码引起的。

第二:确保您的文档确实存在于磁盘上。

第三:SharePoint是一个复杂的系统,其权限和角色的进入门槛很高。您(使用应用程序页面的帐户)应具有使用磁盘上文件的适当权限。检查应用程序页面的上下文 - 例如,当帐户在一个子网站http://root/sites/subsite中为admin时,使用http://root/_layouts/apppage导航到应用程序页面时,他可能不是根网站的管理员。 无论如何,您可以尝试使用elevated privileges来调用您的代码。像

这样的东西
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    Document document = new Document();
    document.LoadFromFile(@"C:\TestFolder\MYDOC.DOC");
    document.SaveToFile(@"C:\Files\MYDOC.PDF", FileFormat.PDF);
});

答案 1 :(得分:0)

根据我的经验,file not found页面表示没有找到自定义错误页面。

就像Oleg Savelyev指出的那样,读取/写入本地磁盘的权限可能存在问题。

使用Memorystream显示或保存PDF文档可能是个好主意。

HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=MYDOC.PDF");
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.WriteFile();
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Clear();

用于将html保存为PDF。也可以使用.doc文件。如果没有查看http://www.aspose.com/.net/word-component.aspx文档为PDF。

希望这有用。