使用iTextSharp生成pdf时出错

时间:2011-06-29 10:29:14

标签: asp.net-mvc itextsharp

这是我的控制器类: -

 public class PlantHeadController : Controller
    {
        private WOMSEntities2 db = new WOMSEntities2();
        //
        // GET: /PlantHead/
        Document doc = new Document();
        static String[] tt=new String[20];



        public ActionResult Index()
        {
            ViewBag.productCode = new SelectList(db.Product, "ID","code");


            return View();
        }

        public void Convert()
        {



            PdfWriter.GetInstance(doc, new
            FileStream((Request.PhysicalApplicationPath + "\\Receipt3.pdf"),
            FileMode.Create));
            doc.Open();
            PdfPTable table = new PdfPTable(2);
            doc.AddCreationDate();
            PdfPCell cell = new PdfPCell(new Phrase("Receipt"));
            cell.Colspan = 3;
            cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
            table.AddCell(cell);

            table.AddCell("ahym");
            table.AddCell("ram";
            table.AddCell("good");
            table.AddCell("morning");

            String rawGroup = "";
            foreach (String lll in raw)
                rawGroup = rawGroup + lll+"    ";


            table.AddCell("" + rawGroup);




            doc.Add(table);


            doc.Close();
            Response.Redirect("~/Receipt3.pdf");


            }


}

每当我按下提交按钮制作pdf文件时,就会打开此错误窗口: - enter image description here

表示未成功生成pdf。在某些情况下,显示旧的pdf。请建议我该怎么办?

1 个答案:

答案 0 :(得分:3)

上面的大部分内容看起来都不错(除了table.AddCell("ram";上缺少的括号,我认为这只是一个错字,你也可以用一些using语句)。我不知道为什么你会得到一个错误,但你得到相同的PDF的原因几乎肯定是因为浏览器缓存。您可以在文件中附加一个随机查询字符串,但我建议您完全跳过该文件并直接编写二进制流。这样您就可以控制缓存,而不必处理浏览器重定向。以下代码应该适合您(其目标是5.1.1.0,具体取决于您可能或可能无法使用某些using语句的版本)。

修改

我将我的代码重新编写为不使用较新版本中的IDisposable接口,这应该适合您。 (我无法访问C#编译器,所以我没有测试它,所以希望这有效。)

    using (MemoryStream ms = new MemoryStream())
    {

        Document doc = new Document());

        PdfWriter writer = PdfWriter.GetInstance(doc, ms));

        doc.Open();

        doc.AddCreationDate();

        PdfPTable table = new PdfPTable(2);
        PdfPCell cell = new PdfPCell(new Phrase("Receipt"));
        cell.Colspan = 3;
        cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
        table.AddCell(cell);

        table.AddCell("ahym");
        table.AddCell("ram");
        table.AddCell("good");
        table.AddCell("morning");

        String rawGroup = "";
        foreach (String lll in raw)
        {
            rawGroup = rawGroup + lll + "    ";
        }

        table.AddCell("" + rawGroup);

        doc.Add(table);
        doc.Close();



        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=Receipt3.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.BinaryWrite(ms.ToArray());
        System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
    }