Car*_*los 48 pdf-generation asp.net-core
我想将一段html导出为pdf文件,但我没有任何兼容的nuget包.
当我尝试安装任何人时:"X与netcoreapp1.0不兼容(.NETCoreApp,Version = v1.0)."
有谁知道用asp.net核心导出到pdf的任何方法?
Jan*_*aha 27
如果你在.net core 2.0中也可以使用jsreport .net sdk,也没有更复杂的节点服务.这包括将您现有的剃刀视图转换为pdf的过滤器.来自文档:
1.安装nugets jsreport.Binary,jsreport.Local和jsreport.AspNetCore
2.在您Startup.cs配置如下
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddJsReport(new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.AsUtility()
.Create());
}
Run Code Online (Sandbox Code Playgroud)
3.然后,您需要向MiddlewareFilter特定操作添加属性并指定要使用的转换.在这种情况下html转换为pdf.
[MiddlewareFilter(typeof(JsReportPipeline))]
public IActionResult Invoice()
{
HttpContext.JsReportFeature().Recipe(Recipe.ChromePdf);
return View();
}
Run Code Online (Sandbox Code Playgroud)
您可以在页眉,页脚或页面布局上找到许多其他选项JsReportFeature().请注意,您也可以通过html生成excel文件.请参阅文档中的更多信息.
PS:我是jsreport的作者.
Sjo*_*und 22
从我原来的答案复制到使用ASP.NET 5导出到pdf:
从.NET Core中的html生成pdf(没有任何.NET框架依赖项)的一种方法是在.NET Core应用程序中使用Node.js.以下示例说明如何在干净的ASP.NET核心Web应用程序项目(Web API模板)中实现HTML到PDF转换器.
安装NuGet包 Microsoft.AspNetCore.NodeServices
在Startup.cs添加一行services.AddNodeServices()这样的
public void ConfigureServices(IServiceCollection services)
{
// ... all your existing configuration is here ...
// Enable Node Services
services.AddNodeServices();
}
Run Code Online (Sandbox Code Playgroud)
现在安装所需的Node.js包:
从命令行将工作目录更改为.NET Core项目的根目录并运行这些命令.
npm init
Run Code Online (Sandbox Code Playgroud)
并按照说明创建package.json文件
npm install jsreport-core --save
npm install jsreport-jsrender --save
npm install jsreport-phantom-pdf --save
Run Code Online (Sandbox Code Playgroud)
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);
})
};
Run Code Online (Sandbox Code Playgroud)
看看这里有更多的解释jsreport-core.
现在在调用此Node.js脚本的Mvc控制器中创建一个操作
[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();
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用byte[]nodeServices返回的任何内容执行任何操作,在此示例中,我只是从控制器操作中输出它,以便可以在浏览器中查看它.
您还可以通过一个base64编码字符串中使用Node.js的交流和.NET核心之间的数据resp.content.toString('base64')中pdf.js,并使用
var result = await nodeServices.InvokeAsync<byte[]>("./pdf");在动作然后解码Base64编码的字符串.
大多数pdf生成器解决方案仍然依赖于.NET 4.5/4.6框架.但是,如果您不喜欢使用Node.js,似乎有一些付费替代方案:
我没有尝试过这些.
我希望我们很快就会看到这方面的一些开源进展.
您可以检查DinkToPdf库。它是.NET Core wkhtmltopdf库的包装。
同步转换器
在多线程应用程序和Web服务器中使用此转换器。转换任务将保存到阻塞收集中,并在单个线程上执行。
var converter = new SynchronizedConverter(new PdfTools());
Run Code Online (Sandbox Code Playgroud)
定义要转换的文件
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4Plus,
},
Objects = {
new ObjectSettings() {
PagesCount = true,
HtmlContent = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In consectetur mauris eget ultrices iaculis. Ut odio viverra, molestie lectus nec, venenatis turpis.",
WebSettings = { DefaultEncoding = "utf-8" },
HeaderSettings = { FontSize = 9, Right = "Page [page] of [toPage]", Line = true, Spacing = 2.812 }
}
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51818 次 |
| 最近记录: |