Asp.net core 在ASP.NET Core中将html导出为pdf

Asp.net core 在ASP.NET Core中将html导出为pdf,asp.net-core,pdf-generation,Asp.net Core,Pdf Generation,我想将一段html导出为pdf文件,但我没有任何兼容的nuget软件包 当我尝试安装任何人时:“X与netcoreapp1.0不兼容(.NETCoreApp,版本=v1.0)。” 是否有人知道使用asp.net core导出为pdf的任何方法???复制自我的原始答案: 从.NET Core中的html生成pdf的一种方法(没有任何.NET framework依赖项)是在.NET Core应用程序中使用Node.js。 下面的示例演示如何在干净的ASP.NET核心Web应用程序项目(Web API

我想将一段html导出为pdf文件,但我没有任何兼容的nuget软件包

当我尝试安装任何人时:“X与netcoreapp1.0不兼容(.NETCoreApp,版本=v1.0)。”


是否有人知道使用asp.net core导出为pdf的任何方法???

复制自我的原始答案:

从.NET Core中的html生成pdf的一种方法(没有任何.NET framework依赖项)是在.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();
}
现在安装所需的Node.js包:

从命令行将工作目录更改为.NET核心项目的根目录,然后运行这些命令

npm init
并按照说明创建package.json文件

npm install jsreport-core --save
npm install jsreport-jsrender --save
npm install jsreport-phantom-pdf --save
在包含以下内容的项目的根目录中创建一个文件
pdf.js

module.exports=函数(回调){
var jsreport=require('jsreport-core')();
jsreport.init().then(函数(){
返回jsreport.render({
模板:{
内容:“你好{{:foo}}”,
引擎:“jsrender”,
配方:“幻影pdf”
},
数据:{
傅:“世界”
}
}).然后(功能(resp){
回调(/*error*/null,resp.content.toJSON().data);
});
}).catch(函数(e){
回调(/*错误*/e,空);
})
};
查看有关
jsreport core
的更多说明

现在在Mvc控制器中创建一个调用Node.js脚本的操作

[HttpGet]
公共异步任务MyAction([FromServices]InodesDevices节点服务)
{
var result=await nodeServices.InvokeAsync(“./pdf”);
HttpContext.Response.ContentType=“application/pdf”;
字符串文件名=@“report.pdf”;
HttpContext.Response.Headers.Add(“x-filename”,filename);
HttpContext.Response.Headers.Add(“访问控制公开头文件”,“x-filename”);
HttpContext.Response.Body.Write(result,0,result.Length);
返回新的ContentResult();
}
当然,您可以使用nodeServices返回的
byte[]
执行任何操作,在本例中,我只是从控制器操作输出它,以便在浏览器中查看它

您还可以使用
pdf.js
中的
resp.content.toString('base64')
通过base64编码字符串在Node.js和.NET Core之间交换数据,并使用
var result=await nodeServices.InvokeAsync(“./pdf”),然后解码base64编码字符串


备选方案

大多数pdf生成器解决方案仍然依赖.NET4.5/4.6框架。但如果您不喜欢使用Node.js,似乎有一些付费的替代方案:

  • 用于.NET Core的EVO HTML到PDF转换客户端
  • 用于.NET Core的Winnovative HTML到PDF转换客户端
但是我没有试过这些


我希望我们很快就会看到这方面的开源进展。

我也遇到了同样的问题!我想从HTML字符串生成PDF文件。然后我遇到了一个命令行实用程序,用于将html文件转换为pdf。我用C#for.NET CORE编写了一个跨平台的包装器,它在Linux上运行得非常好!尽管到目前为止,它只适用于64位Linux,因为这是.NET核心目前唯一支持的平台。 可以找到该项目

PhantomJs.NetCore.PdfGenerator gen=new PhantomJs.NetCore.PdfGenerator(“/path/to/pantomjsfolder”);
字符串outputFilePath=gen.GeneratePdf(“Hello”,“/folder/to/write/file/in”);
您可以查看库。它是用于.NETCore的wkhtmltopdf库的包装器

同步转换器

在多线程应用程序和web服务器中使用此转换器。转换任务保存到阻塞集合,并在单个线程上执行

var converter = new SynchronizedConverter(new PdfTools());
定义要转换的文档

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 }
        }
    }
};
如果您在.net core 2.0中也没有更复杂的节点服务,则可以使用。这包括将现有razor视图转换为pdf的其他功能过滤器。从:

一,。 安装nuget,然后

二,。 在您的
Startup.cs
中,按如下方式配置它

public void配置服务(IServiceCollection服务)
{
services.AddMvc();
AddJsReport(新的LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.a实用性()
.Create());
}
三,。 然后,您需要向特定操作添加
MiddlewareFilter
属性,并指定要使用的转换。在本例中,将html转换为pdf

[MiddlewareFilter(typeof(JsReportPipeline))]
公共发票()
{
HttpContext.JsReportFeature().Recipe(Recipe.ChromePdf);
返回视图();
}
您可以在
JsReportFeature()
上找到页眉、页脚或页面布局的一系列其他选项。请注意,您也可以用同样的方法从html生成excel文件。请参阅中的更多信息


PS:我是jsreport的作者。

这是一个适用于ASP.NET Core 2.0的解决方案,它允许
cshtml
生成动态PDF文件,直接将其发送给用户和/或在发送前保存

作为补充,为了获得更大的灵活性,您可能需要使用以下代码:

///从html字符串生成PDF
异步任务GeneratePDFancy(字符串htmlContent)
{
IJsReportFeature=newjsreportfeature(HttpContext);
配方(Recipe.PhantomPdf);
如果(!feature.Enabled)返回(null,null);
feature.RenderRequest.Template.Content=htmlContent;
var报告=等待_RenderService.RenderA
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 }
        }
    }
};