2014-02-08 84 views
1

我在.net 3.5應用程序中使用itextsharp 5.4.5。當從文件路徑創建一個PdfReader對象時,我得到一個文件未找到的異常,但該文件存在。我已確認File.Open能夠打開文件。測試代碼:ItextSharp無法找到PDF

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應用程序?

回答

2

我想出了問題所在。由於某種原因,網絡服務器「阻塞」了itext庫。右鍵單擊庫訪問屬性並單擊「取消阻止」,然後強制重新啓動應用程序可解決問題。

我希望這可以幫助別人...

+1

我最初被這個答案困惑,因爲我從來沒有聽說過Unblock按鈕。只是爲了解決可能遇到此問題的任何其他人。您必須右鍵單擊itextsharp.dll文件並選擇「屬性」。從那裏您將看到「常規」選項卡底部的「解除阻止」按鈕。 –

+0

我沒有開鎖按鈕。答案在這裏:http://stackoverflow.com/a/32394334/287516是我解決這個問題更簡單的方法。 – ilasno

0

我也有這個問題。結果相當精細,所以不確定其他人會有同樣的問題,但它值得檢查。

在我的情況下,我的系統打開存儲在數據庫中的文件名的PDF文件。當我移動文件時,我的系統無法再打開這些文件,因爲現在總文件名太長了。例如:c:\the\path\here\in\total\was\just\way\too\long\anditbroke.pdf

另外一定要在Windows中檢查您的文件權限。應用程序的運行身份必須有權訪問該文件。