该进程无法使用PdfWriter.GetInstance访问该文件

时间:2013-03-05 09:48:38

标签: c# iis-7 file-in-use

我使用以下代码将HTML内容保存为PDF:

public void SaveHTMLToPdf(string HTML, string FilePath)
{
    Document document = new Document(PageSize.A4, 10f, 10f, 100f, 0f);

    PdfWriter.GetInstance(document, new FileStream(Request.PhysicalApplicationPath + "\\Invoice_Statement.pdf", FileMode.Create));
    document.Open();
    iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(Server.MapPath(ImgCom.ImageUrl.ToString()));

    pdfImage.ScaleToFit(150, 100);

    pdfImage.Alignment = iTextSharp.text.Image.UNDERLYING; pdfImage.SetAbsolutePosition(40, 770);

    document.AddTitle("Invoice Details");
    document.Add(pdfImage);

    iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
    iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);

    styles.LoadTagStyle("th", "color", "red");
    styles.LoadTagStyle("th", "frontsize", "5");

    document.Add(new Header(iTextSharp.text.html.Markup.HTML_ATTR_STYLESHEET, "Style.css"));

    hw.Parse(new StringReader(HTML));

    document.Close();
}

但它给出了这个错误:

  

该进程无法访问文件'C:\ inetpub \ wwwroot \ abc \ Invoice_Statement.pdf',因为它正由另一个进程使用。

在这一行:

PdfWriter.GetInstance(document, new FileStream(Request.PhysicalApplicationPath + 
                      "\\Invoice_Statement.pdf", FileMode.Create));

它仅在具有IIS-7的服务器上发生,并且在Visual Studio的本地工作正常。

任何人都可以帮忙.. ??

1 个答案:

答案 0 :(得分:0)

可能,这是因为您没有权限将文件写入该位置。请记住,当您使用Visual Studio在本地运行时,IIS将在您当前登录的安全上下文中运行,并且您可能具有读取/写入文件位置所需的权限。部署到服务器后,服务器通常在网络服务帐户或本地系统帐户的安全上下文下运行IIS。您想验证您的目录是否已授予对这两个帐户的读/写权限。