我正在尝试使用wkhtmltopdf
用HTML代码制作PDF。在C#中,我使用Process
执行所有操作。我需要通过JavaScript从HTML页面上获取某些<div>
,并将所有这些内容发送到我的Asp。当前正在尝试将此字符串作为参数传递给URL,但是它太长了。是否还有其他方法可以使用JS获取较大的HTML字符串,并将其发送到.NET Core,并从其内容PDF中提取出来?
function getDBData(src)
{
let script = document.createElement("SCRIPT");
script.src = backend + src;
document.getElementsByTagName("head")[0].appendChild(script);
}
function tableToPdf()
{
// Add in htmlContent heade
let htmlContent = "<head><link rel=\"stylesheet\" href=\"table-
style.css\" media=\"all\"/></head>";
// Get all tables
let tables = document.querySelectorAll("#tableWrapper .col-lg-12");
for(let i = 0; i < tables.length; i++)
{
// Get header of table
let tableHeader = tables[i].querySelector(".tableHeader").outerHTML;
// Get table content
let tableContent = tables[i].querySelectorAll(".wrapper-table-section-library")[1].outerHTML;
htmlContent += tableHeader
htmlContent += tableContent;
}
// Get width ant height of tableWrapper
let height = document.querySelector("#tableWrapper").offsetHeight;
let width = document.querySelector("#tableWrapper").offsetWidth;
getDBData("getTablePdf?width=" + width + "&height=" + height +"&htmlContent=" + htmlContent + "&outputFileName=tables");
}
答案 0 :(得分:0)
让我们假设您已经有一个大字符串:
var largeString = '...';
将数据从脚本发送到后端的一种方法是执行AJAX POST请求:
$.ajax({
url: '/Sample/PrintDocument',
type: 'POST',
data: JSON.stringify({
dataToPrint: largeString
}),
contentType: 'application/json; charset=utf-8',
dataType: 'json'
})
.done(function(result) {
// ... do something after the request was processed
});
现在,如果您希望在用户单击“打印”按钮时发送此请求:
$('body').on('click', '#printButton', function (){
// Do the POST request
$.ajax({
...
});
然后在您的控制器中,您将得到以下内容:
public class SampleController : Controller
{
...
[HttpPost]
public async Task<JsonResult> PrintDocument([FromBody] string dataToPrint)
{
...
}
}
答案 1 :(得分:0)
如果您使用Blazor Server端,则SignalR的有效负载大小会被忽略。默认大小为32kb。您可以更改它,但这不是一个好习惯。例如,您可以将字符串拆分为数组子字符串或上传文件。