使用ASP.NET 5导出为pdf [英] Export to pdf using ASP.NET 5

查看:139
本文介绍了使用ASP.NET 5导出为pdf的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究MVC 6应用程序(DNX Core 5.0框架).不幸的是,我找不到用于pdf导出的任何库.

I am working on MVC 6 application(DNX Core 5.0 framework). Unfortunately, I don't find any library for pdf export.

任何帮助将不胜感激.

推荐答案

如果您必须依赖Core,则有两种选择:

If you must rely on Core you'll have two options:

Core仍然是RC1,并逐渐迁移到RC2,并且您不会很快发现很多库.由于.NET Core引起了广泛关注,因此第一个库应该会在几个月后问世,但我想您至少要等待RC2发布.

Core is still RC1, slowly moving to RC2, and you won't find much libs really soon. Since .NET Core is taking much attention, first libs should come out in a few months, but I'd guess you'll have to wait for at least RC2 release.

您可以获取一个最适合您需求的开源项目,进行分叉(如果在GitHub上),或者只是下载并开始更新到.NET Core.我刚刚用DapperExtensions完成了它,它的工作就像一个魅力.您甚至可以为您添加一些辛辣;)

You can grab an open-source project that best fits your needs, fork (if on GitHub) or just download and start updating to .NET Core. I've just done that with DapperExtensions and it's working like a charm. You can even add some spicy just for you ;)

另一方面,如果您只需要一些有效但又不需要直接嵌入.NET Core的东西,则可以设法使

On the other hand, if you just need something that works but with no direct need of embedding into .NET Core, I've managed to make JsReport work fine. It will start it's very own server (embedded server) based on Node but integration is really easy (with AspNet Core very own Dependecy Injection system!) and PDF are created with no further issue.

如果您对此感兴趣,请参阅以下说明:

If that interests you, here are some instructions:

将这些添加到您的project.json:

Add those to your project.json:

"jsreport.Embedded": "0.8.1",
"jsreport.Client": "0.8.1"

2-AspNet集成

之后,请按照jsReport 此处中的说明进行操作.您可以在此处配置AspNet DI系统:

2 - AspNet integration

After, follow instructions from jsReport here. You can configure AspNet DI system as here:

public void ConfigureServices(IServiceCollection services)
{
   // ...
   var _server = new EmbeddedReportingServer();
   _server.StartAsync().Wait();
   services.AddInstance<IEmbeddedReportingServer>(_server);
   services.AddSingleton<IReportingService>((s) => { return s.GetRequiredService<IEmbeddedReportingServer>().ReportingService; });
   // ...
}

例如,要使用它,您只需接收一个IReportingService或从控制器上的Resolver手动获取它即可.

To use you'll just have to either receive an IReportingService or manually grab it from Resolver on your controller, for instance.

public IActionResult SomeReport()
{
   // This is <my> type of usage. It's a bit manual because I'm currently loading reports from DB. You can use it in a diferent way (check jsReport docs).
   var service = Resolver.GetRequiredService<jsreport.Client.IReportingService>();

   var phantomOptions = new jsreport.Client.Entities.Phantom()
   {
      format = "A4",
      orientation = "portrait",
      margin = "0cm"
   };
   phantomOptions.footer = "<h2>Some footer</h2>";
   phantomOptions.footerHeight = "50px";
   phantomOptions.header = "<h2>Some header</h2>";
   phantomOptions.headerHeight = "50px";
   var request = new jsreport.Client.RenderRequest()
   {
      template = new jsreport.Client.Entities.Template()
      {
         content = "<div>Some content for your report</div>",
         recipe = "phantom-pdf",
         name = "Your report name",
         phantom = phantomOptions
      }
   };

   var _report = service.RenderAsync(request).Result;

   // Request file download.
   return File(_report.Content, "application/pdf", "Some fancy name.pdf");
}

4-重要提示:您的服务器无法启动(缺少zip文件)

由于对AspNet项目上的NuGet所做的更改,您必须手动移动一些不会自动移动的内容文件.

4 - Important: your server won't start (missing a zip file)

Due to changes from NuGet on AspNet projects, you have to manually move some content files which are not moved automatically.

首先,找到嵌入式服务器的dnx缓存.应该是这样的:
C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1.

First, find your dnx cache for the embedded server. Should be something like:
C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1.

您会注意到那里有一个名为content的文件夹.只需将其内容(两个文件:node.exejsreport-net-embedded.zip)复制到lib\net45.

You'll notice a folder called content there. Simply copy it's contents (two files: node.exe and jsreport-net-embedded.zip) into lib\net45.

因此,简单明了:从
复制内容(仅文件) C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1\contents
进入
C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1\lib\net45.

那应该解决启动问题.切记:第一次启动将提取文件,并且需要几分钟.之后,它将更快.

So, to be plain simple and fool-proof: copy contents (files only) from
C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1\contents
into
C:\Users\<name>\.dnx\packages\jsreport.Embedded\0.8.1\lib\net45.

That should solve startup issues. Remember: first startup will extract files and should take a few minutes. After that, it will be much much faster.

这篇关于使用ASP.NET 5导出为pdf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆