我在学习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");
}
答案 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也可以在浏览器中缓存。但是,这是您在此处描述的问题的罕见原因。我认为在这种情况下你可以安全地忽视它。