带有文本框的ABCpdf未以PDF格式更新

时间:2013-04-26 23:24:59

标签: asp.net-mvc pdf-generation abcpdf

我在学习ASP.net MVC时正在制作发票网站,到目前为止一直很好。我遇到的问题是当我在我的应用程序中更新发票,然后尝试将其作为pdf下载时,我得到页面的初始内容而没有更新。我想在有人下载它之前显示pdf,这工作得很好。所以我不知道我的问题是否与流没有得到页面上的更改有关。

如果可能的话,我还想在网址中返回一个Guid,并且不知道如何设置当前的设置。

任何帮助都会很棒!

注意:我发布了网站但ABCpdf错误(可能是因为它是试用版),但是,在本地我可以生成PDF

查看

@Html.ActionLink("Download PDF", "DownloadPDF", null, new { @class = "btn btn-action", @target = "_blank" })

控制器

    public ActionResult DownloadPDF()
    {
        Doc pdf = new Doc();
        MemoryStream stream = new MemoryStream();

        pdf.Rect.Inset(40, 40);
        pdf.HtmlOptions.Engine = EngineType.Gecko;
        pdf.HtmlOptions.UseScript = true;

        pdf.AddImageUrl("http://local.completeinvoice.com/");
        byte[] data = pdf.GetData();

        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "inline; filename=invoice-001.pdf");
        Response.AddHeader("content-length", data.Length.ToString());
        Response.BinaryWrite(data);
        Response.Flush();
        Response.End();

        pdf.Flatten();
        pdf.Save(stream);
        stream.Close();
        pdf.Clear();

        return View("Index");
    }

2 个答案:

答案 0 :(得分:0)

在阅读http://www.websupergoo.com/helppdf9net/source/3-concepts/g-htmlrender.htm时,我发现:

  

您可以渲染任何可以提供URL的页面。渲染页面时,页面必须由ABCpdf重新加载。

基本上,您需要一个唯一的URL,即实际页面,并显示数据,以便ABCpdf能够在将页面呈现为PDF之前读取该页面。

另一种选择是将页面保存为.html,然后从服务器读取页面,然后删除生成的.html页面。

答案 1 :(得分:0)

您在此示例中提供的URL每次都相同,但您希望每次都更改输出。

因此,这里至关重要的是确定如何存储国家。假设这是某种类型的发票,发票号码来自哪里?

执行此操作的常规方法是在URL中对发票ID进行编码。然后在您的页面中选取ID并使用该唯一标识符生成页面。

通过这种方式,您可以通过电子邮件将链接发送给您的朋友,她会看到您看到的同一张发票。上面示例中使用的URL是通用的。如果你邮寄给知道她会看到什么的朋友?

ABCpdf是一样的。它确实需要一个可以使用的唯一URL。是的,它可以解决会话状态和cookie,但如果你想这样做,它会变得非常复杂和令人厌烦。更简单,只是为了确保每个URL都是唯一的。

因此,请调整传递给AddImageUrl的URL,使其包含将要返回的唯一页面所需的状态。那么ABCpdf会看到你看到的同样的东西。

我会注意到PDF也可以在浏览器中缓存。但是,这是您在此处描述的问题的罕见原因。我认为在这种情况下你可以安全地忽视它。