ItextSharp не может найти PDF

Я использую itextsharp 5.4.5 в приложении .net 3.5. При создании объекта PdfReader из пути к файлу я получаю исключение «Файл не найден», но файл существует. Я подтвердил, что File.Open может открыть файл. Тестовый код:

try
{
    FileStream f = File.Open(Server.MapPath("~/App_Data/pdf/EC_1.0.pdf"), FileMode.Open);
    f.Close();
    f.Dispose();

    PdfReader pdfReader = new PdfReader(Server.MapPath("~/App_Data/pdf/EC_1.0.pdf"));
    pdfReader.Close();
    pdfReader.Dispose();

    Response.Write("Succeed");
}
catch (IOException cex)
{
    Response.Write("Fail: <br /><br /><b>Message:</b> " + cex.Message.Replace("<", "&lt;").Replace(">", "&gt;") +
        "<br /><br /><b>Exception .ToString:</b> " + cex.ToString().Replace("<", "&lt;").Replace(">", "&gt;") +
        "<br /><br /><b>Source:</b> " + cex.Source +
        "<br /><br /><b>StackTrace:</b> " + cex.StackTrace +
        "<br /><br /><b>TargetSite:</b> " + cex.TargetSite);
}
catch (Exception cex)
{
    Response.Write("Fail: <br /><br /><b>Message:</b> " + cex.Message.Replace("<", "&lt;").Replace(">", "&gt;") +
        "<br /><br /><b>Exception .ToString:</b> " + cex.ToString().Replace("<", "&lt;").Replace(">", "&gt;") +
        "<br /><br /><b>Source:</b> " + cex.Source +
        "<br /><br /><b>StackTrace:</b> " + cex.StackTrace +
        "<br /><br /><b>TargetSite:</b> " + cex.TargetSite);
}

Сведения об исключении:

Message: C:\inetpub\wwwroot\HepBnet\research\DataSystem\App_Data\pdf\EC_1.0.pdf not found as file or resource.

Exception .ToString: System.IO.IOException: C:\inetpub\wwwroot\HepBnet\research\DataSystem\App_Data\pdf\EC_1.0.pdf not found as file or resource. at iTextSharp.text.io.RandomAccessSourceFactory.CreateByReadingToMemory(String filename) at iTextSharp.text.io.RandomAccessSourceFactory.CreateBestSource(String filename) at iTextSharp.text.pdf.PdfReader..ctor(String filename, Byte[] ownerPassword, Boolean partial) at iTextSharp.text.pdf.PdfReader..ctor(String filename) at ASP.errors_pdf_test_aspx.Page_Load()

Source: itextsharp

StackTrace: at iTextSharp.text.io.RandomAccessSourceFactory.CreateByReadingToMemory(String filename) at iTextSharp.text.io.RandomAccessSourceFactory.CreateBestSource(String filename) at iTextSharp.text.pdf.PdfReader..ctor(String filename, Byte[] ownerPassword, Boolean partial) at iTextSharp.text.pdf.PdfReader..ctor(String filename) at ASP.errors_pdf_test_aspx.Page_Load()

TargetSite: iTextSharp.text.io.IRandomAccessSource CreateByReadingToMemory(System.String)

Я предполагаю, что это проблема с разрешением, но разве itext не должен использовать того же пользователя, что и приложение .net?


person Dave Avatar    schedule 08.02.2014    source источник


Ответы (2)


Я понял, в чем дело. По какой-то причине веб-сервер «блокировал» библиотеку itext. Щелчок правой кнопкой мыши по библиотеке, чтобы получить доступ к свойствам, и нажатие «Разблокировать», а затем принудительный перезапуск приложения устранили проблему.

Я надеюсь, что это поможет кому-то еще...

person Dave Avatar    schedule 08.02.2014
comment
Меня изначально смутил этот ответ, потому что я никогда не слышал о кнопке «Разблокировать». Просто чтобы прояснить ситуацию для тех, кто может столкнуться с этой проблемой. Вы должны щелкнуть правой кнопкой мыши файл itextsharp.dll и выбрать «Свойства». Оттуда вы увидите кнопку «Разблокировать» в нижней части вкладки «Общие». - person Erikk Ross; 04.09.2015
comment
У меня не было кнопки Разблокировать. Ответ здесь: stackoverflow.com/a/32394334/287516 был для меня гораздо более простым способом решить проблему. - person ilasno; 08.11.2015

У меня тоже была эта проблема. Оказалось, что это довольно сложно, поэтому не уверен, что у кого-то еще будет такая же проблема, но стоит проверить.

В моем случае моя система открывает файлы PDF из имени файла, хранящегося в базе данных. Когда я перемещал свои файлы, моя система больше не могла открывать файлы, потому что теперь общее имя файла было слишком длинным. например: c:\the\path\here\in\total\was\just\way\too\long\anditbroke.pdf

Также не забудьте проверить права доступа к файлам в Windows. Действующее удостоверение приложения должно иметь доступ к файлу.

person Geoff    schedule 07.11.2015