我是一名新手尝试使用NodeJS / Express和Handlebars构建一个用于模板需求的网络应用程序。
该应用程序的一部分涉及生成销售发票。我已经写了一个把手模板和一些javascript代码来处理项目的添加/删除和计算总数等工作正常。
需要在NodeJS服务器上生成此发票的PDF表格,其中包含在客户端添加的动态内容。
我不确定如何继续实施这一点。我已经评估了客户端PDF生成选项,但我的用例并不合适。
如果客户端html页面中有动态元素,是否可以在服务器端生成pdf,请告诉我?
此应用与此链接中的应用类似:http://www.smarttutorials.net/invoice-system-using-jquery-autocomplete/
代码的动态部分如下:
//添加额外的表格行
var i=$('table tr').length;
$(".addmore").on('click',function(){
html = '<tr>';
html += '<td><input class="case" type="checkbox"/></td>';
html += '<td><input type="text" data-type="productCode" name="itemNo[]" id="itemNo_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>';
html += '<td><input type="text" data-type="productName" name="itemName[]" id="itemName_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>';
html += '<td><input type="text" name="price[]" id="price_'+i+'" class="form-control changesNo" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;"></td>';
html += '<td><input type="text" name="quantity[]" id="quantity_'+i+'" class="form-control changesNo" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;"></td>';
html += '<td><input type="text" name="total[]" id="total_'+i+'" class="form-control totalLinePrice" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;"></td>';
html += '</tr>';
$('table').append(html);
i++;
});
//删除选定的表行
$(".delete").on('click', function() {
$('.case:checkbox:checked').parents("tr").remove();
$('#check_all').prop("checked", false);
});
答案 0 :(得分:1)
作为您的使用快递,并且能够使用此数据创建网页。
我会使用https://www.npmjs.com/package/phantom
这可用于将您的网页转换为PDF,您还可以使用CSS属性page-break-after
等控制分页符。
答案 1 :(得分:0)
有一个名为serverless-chrome的github库,与您正在寻找的功能非常接近。
它与AWS lambda和nodejs一起使用。它使用无服务器的chrome浏览器访问您的网站并进行屏幕截图或将整个网站另存为PDF文件并显示PDF文件。部署非常简单,并使用无服务器框架。我在客户端的AWS帐户上部署了github库。
这是您在部署后获得的演示链接。
https://1wphj1kzch.execute-api.ap-southeast-1.amazonaws.com/dev/pdf?url=http://www.gmail.com
用您选择的网站链接替换http://www.gmail.com
。它等待网站完全加载,然后截取屏幕截图。您可以部署它并使用上面生成的链接那样的链接来截取屏幕截图并保存它们,也可以使用另一个lambda函数并将pdfs保存到AWS上的S3存储桶中。
最重要的是,如果您不熟悉AWS,则每月可以免费执行40万次lambda执行。