2012-04-16 53 views
1

正在使用itextsharp生成PDF文件。出現此錯誤「指定的路徑,文件名或兩者都過長,完全限定的文件名必須少於260個字符,並且目錄名稱必須少於248個字符。」請幫我過來這個。使用iTextSharp htmlparser錯誤

錯誤 - 「指定的路徑,文件名或這兩者太長,全限定文件名必須少於260個字符,並且目錄名稱必須少於248個字符。」 代碼段:

protected void ExportHTMLtoPDF() 
{ 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("content-disposition", "attachment;filename=" + HttpContext.Current.Session["StudentID"].ToString() + ".pdf"); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
    frmPrint.RenderControl(hw); 
    StringReader sr = new StringReader(sw.ToString()); 
    Document pdfDoc = new Document(PageSize.A3, 0f, 0f, 0f, 0f); 
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
    PdfWriter writer; 
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
    pdfDoc.Open(); 
    pdfDoc.Close(); 
    Response.Write(pdfDoc); 
    Response.End(); 
} 
+0

哪一行代碼實際上是拋出異常?既然你不寫任何東西到磁盤上,你不應該看到這樣的消息。 – 2012-04-16 12:57:39

+0

根據您配置的環境,ASP.NET,Visual Studio或IIS應用程序池* * not * iTextSharp將引發異常。嘗試發送HTML /文本文件附件,看看會發生什麼。 (註釋掉所有的iTextSharp代碼)Google「_完全限定的文件名必須少於260個字符,並且目錄名稱必須小於248個字符(引號內),你很可能會找到答案。 – kuujinbo 2012-04-17 05:21:10

回答

1

這無關你的代碼 - 這是Windows的最大文件名長度。 Chris Haas注意到你的代碼並沒有明顯寫入任何文件,所以最有可能的是創建了一個臨時文件 - 我猜想HTMLWorker或PDFWriter正在創建一個臨時文件來寫入。

您可以使用ProcessMon來查找您的應用程序嘗試打開哪些文件,並查看哪個文件名引起其投訴,這可能會給您一個指示問題源於何處的指示。

+0

雖然這是絕對正確的,但上面的代碼並沒有保存任何東西到磁盤,所以它不應該拋出這種異常。 – 2012-04-16 12:56:38

+0

好點。所以有些東西(可能是PDFWriter)大概在這個過程中寫了一個臨時文件,並且命名不好。 – glenatron 2012-04-16 13:31:22

0

問題是iTextSharp使用System.IO。 System.IO依賴於具有此路徑長度限制的win32。因此,唯一的辦法是嘗試整合長文件名hack或其他庫,如Alphaleonis。