【问题标题】:Using iTextSharp htmlparser error使用 iTextSharp htmlparser 错误
【发布时间】:2012-04-16 12:02:20
【问题描述】:

我正在使用itextsharp 生成 PDF 文件。我收到了这个错误:

"指定的路径、文件名或两者都太长。完全 限定文件名必须少于 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();
}

【问题讨论】:

  • 哪一行代码实际上抛出了那个异常?由于您没有向磁盘写入任何内容,因此您不应该看到这样的消息。
  • 根据您配置的环境,ASP.NET、Visual Studio 或 IIS 应用程序池not iTextSharp 将引发异常。尝试发送 HTML/文本文件附件,看看会发生什么。 (注释掉所有 iTextSharp 代码)谷歌“完全限定的文件名必须少于 260 个字符,并且目录名必须少于 248 个字符”(用引号括起来)你可能会发现一个答案。

标签: c# asp.net itext


【解决方案1】:

这与您的代码无关 - 这是 Windows 的最大文件名长度。 Chris Haas 观察到您的代码显然没有写入任何文件,因此很可能正在创建一个临时文件 - 我猜 HTMLWorker 或 PDFWriter 中的某些内容正在创建一个要写入的临时文件。

您可以使用ProcessMon 来查找您的应用程序试图打开哪些文件,并查看导致它抱怨的文件名,这可能会为您提供有关问题出处的指示。

【讨论】:

  • 虽然这绝对是真的,但上面的代码并没有将任何内容保存到磁盘上,所以它不应该抛出那种异常。
  • 好点。所以有些东西(可能是 PDFWriter )可能是在这个过程中写了一个临时文件并命名得很糟糕。
【解决方案2】:

问题在于 iTextSharp 使用 System.IO。 System.IO 依赖于具有此路径长度限制的 win32。因此,唯一的解决方法是尝试集成长文件名 hack 或其他解决此问题的库,例如 Alphaleonis。

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2017-11-17
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多