我有一个带控制器的asp.net核心网站,该控制器返回带有ViewModel的View。
此视图使用jsPdf在javascript上生成pdf。我无法在服务器端执行pdf生成,因为我使用的是客户端组件(fabric.js)
我想公开一个API,以便能够下载此pdf。
当我使用浏览器到达终点时,pdf文件已正确下载。 当我在C#中使用邮递员或WebClient时,我无法获取pdf ... 我想我缺少了一些东西。测试方法不起作用,我有一个pdf文件,但无法打开,它只有15ko:(
我的观点:
<script src="/Scripts/fabric.js"></script>
<script src="/Scripts/jspdf.debug.js"></script>
<script type="text/javascript">
var canvas = new fabric.Canvas('canvas', {});
canvas.loadFromJSON(@Html.Raw(Model.Json),
() => {
canvas.setWidth(@Model.Width);
canvas.setHeight(@Model.Height);
var imgData = new Image();
imgData.crossOrigin = "Anonymous";
imgData.src = canvas.toDataURL('png');
var pdf = new jsPDF('p', 'pt', [@Model.Width, @Model.Height]);
pdf.addImage(imgData, 'PNG', 1, 1, @Model.Width, @Model.Height, 'Mockup', 'NONE', 0);
pdf.save('myMockup.pdf');
}
);
</script>
我的控制器:
public IActionResult Generate(int id)
{
var mockup = DynamicValueAppService.ParseMockup(id);
var mockupVM = new MockupGeneratorViewModel()
{
Width = mockup.Width,
Height = mockup.Height,
Json = JObject.Parse(mockup.Json)
};
Response.Headers.Add("Content-Type","application/octet-stream");
Response.Headers.Add("Content-Disposition", "attachment");
return View(mockupVM);
}
public IActionResult Test()
{
var client = new WebClient();
client.DownloadFile("http://localhost:21021/Mockup/generate/1", @"C:\mum.pdf");
return new EmptyResult();
}