2013-03-05 4 views
0

Я спасаю содержимое HTML в PDF с помощью следующего кода:Процесс не может получить доступ к файлу с PdfWriter.GetInstance

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(); 
} 

Но это дает эту ошибку:

The process cannot access the file 'C:\inetpub\wwwroot\abc\Invoice_Statement.pdf' because it is being used by another process.

На этой линии:

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

Это происходит только на сервере с IIS-7 и отлично работает на местном уровне с визуальной студией.

Может ли кто-нибудь помочь .. ??

+0

Вы открыли pdf-файл, отличный от вашего кода? – TalentTuner

ответ

0

Вероятно, это связано с тем, что у вас нет прав на запись файла в это место. Имейте в виду, что при запуске локально с помощью Visual Studio IIS работает в контексте вашего текущего входа в систему безопасности, и у вас, вероятно, есть необходимые разрешения для чтения/записи в расположение файла. После развертывания на сервере сервер обычно запускает IIS в контексте безопасности учетной записи сетевой службы или учетной записи локальной системы. Вы хотите убедиться, что ваш каталог предоставил разрешения на чтение/запись для этих двух учетных записей.

Смежные вопросы