PDF创建工具,可以处理客户端视图更改

时间:2014-12-12 18:49:56

标签: asp.net .net twitter-bootstrap pdf pdf-generation

我正在尝试找到一种可用于从网站创建PDF的工具。这些网站都具有基于Bootstrap的客户端侧视图设置,例如选项卡,切换和分页。因此,没有回发到服务器。我需要能够创建一个与用户看到的状态相同的pdf。

在我的研究中,我只能找到可以创建PDF的工具(如果给定URL),或者给定HTML字符串。这些工具的示例包括ActivePDF's WebgrabberEVO PDF。但是,他们无法使用特定于客户端的设置生成PDF,而只能查看给定页面的默认选择。我不可能回发到服务器,所以我正在寻找一种可以动态创建PDF的工具,动态设置完好无损。我在ASP.NET工作,所以我想要一个.NET友好的工具。最后,我希望该工具不是开源的。

1 个答案:

答案 0 :(得分:0)

这听起来像是一个合适的解决方案,从客户端获取数据,通过AJAX(不是ASP.NET回发!)发布,然后在服务器端处理它以生成PDF。由于您没有提供太多详细信息,我将假设我们不需要发送所有HTML,而是通过表单输入的值。

<script>
function postDataToServer(){
    var itemId = $("#ItemIdTB").val();
    var quantityOrdered = $("#QuantityTB").val();
    $.ajax({
        url : "GeneratePdfFromForm?itemId="+itemId+"&quantityOrdered="+quantityOrdered
    })
    .done(function(){alert("Success!");})
    .fail(function(){alert("Failure!");});
}
</script>

我的回答是使用jQuery,这是一个简化AJAX和DOM操作的JavaScript库。但是,这种技术可以与其他JavaScript库(甚至没有库)一起使用。

在服务器端,让我们有ASP.NET Web API函数来处理AJAX Post。

[Route("GeneratePdfFromForm")]
public static void GeneratePdfFromForm(string itemId, int quantityOrdered)
{
    Debug.WriteLine("Received itemId {0} and quantity {1}", itemId,   quantityOrdered);
    byte[] pdf = GeneratePDF(itemId, quantityOdered); //you'll need a function called GeneratePDF that can generate your PDF based on the parameters, probably using a library like iTextSharp.
    //now do you want with the PDF byte array
}

这就是您如何生成PDF。您可以将其从GeneratePdfFromForm()函数返回给客户端。但由于这可能是一项长期运行的任务,您可能应该在后台使用Hangfire之类的东西来实现它,然后当PDF准备就绪时,您将它呈现给客户端以供下载(也许使用SignalRjQuery AJAX polling向客户提醒PDF何时准备就绪。

我是通过查询字符串将数据从客户端传递到服务器端。您可以创建一个类来表示PDF生成的参数,然后通过jQuery AJAX的data参数将该表单传递给服务器端。

如果你真的想将整个HTML从客户端发布到服务器,你可以这样:

var html=$("html").html();
$.ajax({
    url: <your url here>,
    data: html,
    contentType: "text/html"
});

但是,我愿意打赌实际的HTML并不是您关心生成PDF的内容,而是来自某些客户端形式的选定值。实际的HTML将包括客户端的所有,包括导航菜单,脚本等。您可以使用不同的选择器发布HTML的子集(例如:$("#OrderDiv").html()),这是一个一些人用来生成PDF的技术。但我认为将用于浏览器的HTML与生成PDF的方式分离起来要清晰得多,因此对网站的更改不会弄乱PDF。然后你可以使用se the PDF creating library's capabilities to build the PDF而不是使用HTML。