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
Първоначално бях объркан от този отговор, защото никога не съм чувал за бутона Unblock. Само за да изясня нещата за всеки друг, който може да се сблъска с този проблем. Трябва да щракнете с десния бутон върху файла itextsharp.dll и да изберете Properties. Оттам ще видите бутона Отблокиране в долната част на раздела Общи. - 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