Скопировано из моего первоначального ответа здесь Export to pdf using ASP.NET 5:
Один способ создания PDF из HTML в .NET Ядра (без каких-либо рамок .NET зависимостей) использует Node.js из приложения .NET Core. В следующем примере показано, как реализовать конвертер HTML в PDF в чистый проект ASP.NET Core Web Application (шаблон веб-API).
Установите пакет NuGet Microsoft.AspNetCore.NodeServices
В Startup.cs добавить строку services.AddNodeServices()
как этот
public void ConfigureServices(IServiceCollection services)
{
// ... all your existing configuration is here ...
// Enable Node Services
services.AddNodeServices();
}
Теперь установите необходимые Node.js пакеты:
Из командной строки измените рабочий каталог в корень проекта .NET Core и выполните эти команды.
npm init
и следуйте инструкциям, чтобы создать файл
npm install jsreport-core --save
npm install jsreport-jsrender --save
npm install jsreport-phantom-pdf --save
package.json Создайте файл pdf.js
в корневом каталоге проекта, содержащего
module.exports = function (callback) {
var jsreport = require('jsreport-core')();
jsreport.init().then(function() {
return jsreport.render({
template: {
content: '<h1>Hello {{:foo}}</h1>',
engine: 'jsrender',
recipe: 'phantom-pdf'
},
data: {
foo: "world"
}
}).then(function (resp) {
callback(/* error */ null, resp.content.toJSON().data);
});
}).catch(function (e) {
callback(/* error */ e, null);
})
};
Посмотрите here для более подробного объяснения на jsreport-core
.
Теперь создайте действие в контроллере Mvc, который вызывает этот Node.js скрипт
[HttpGet]
public async Task<IActionResult> MyAction([FromServices] INodeServices nodeServices)
{
var result = await nodeServices.InvokeAsync<byte[]>("./pdf");
HttpContext.Response.ContentType = "application/pdf";
string filename = @"report.pdf";
HttpContext.Response.Headers.Add("x-filename", filename);
HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "x-filename");
HttpContext.Response.Body.Write(result, 0, result.Length);
return new ContentResult();
}
Off Конечно, вы можете делать все, что вы хотите с byte[]
вернулся из nodeServices, в этом примере я просто выводит его от действия контроллера, чтобы его можно было просмотреть в браузере.
Кроме того, можно обмениваться данными между Node.js и .NET Ядро с помощью base64 закодированной строки с использованием resp.content.toString('base64')
в pdf.js
и использовать var result = await nodeServices.InvokeAsync<byte[]>("./pdf");
в действии, а затем декодировать в формате base64 строку.
Альтернативы
Большинство решений PDF Generator все еще зависят от .NET 4.5/4.6 рамки. Но, похоже, есть некоторые платные альтернативы, если вы не любите использовать Node.ЯШ:
- NReco.PdfGenerator.LT
- EVO HTML в PDF Converter клиент для .NET ядра
- Winnovative HTML в PDF Converter клиент для .NET Ядро
Я не пробовал любой из них, хотя ,
Надеюсь, мы скоро увидим прогресс с открытым исходным кодом в этой области.
Возможный дубликат [Экспорт в PDF с помощью ASP.NET 5] (http://stackoverflow.com/questions/36983300/export -to-pdf-using-asp-net-5) –
Чистое ядро отличается от asp.net 5, другая структура, другие библиотеки – Carlos
AspNet Core 1.0 - новое имя. AspNet 5 (формально AspNet vNext) был оригинальным, но поскольку он был совершенно новым продуктом, MS решила полностью изменить его имя на AspNet Core. –