ASP.NET Core中快速构建PDF文档的步骤分享

当我们需要在ASP.NET Core中要快速构建PDF文档时,我们可以通过以下步骤进行:

步骤一:安装依赖

我们需要安装以下库:

  • DinkToPdf:该库可以将HTML转换为PDF。
  • DinkToPdf nuget包:用于安装库的nuget包。
  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation nuget包(可选):可以在运行时编译Razor View,以便将其转换为HTML用于PDF文档生成。

你可以通过在项目中的NuGet包管理器中搜索这些库来进行安装。

步骤二:添加依赖注入

在ASP.NET Core的Startup文件中,我们需要添加以下依赖注入

using DinkToPdf.Contracts;
using DinkToPdf;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        var context = new CustomAssemblyLoadContext();
        context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));

        services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
    }

    // other configuration
}

CustomAssemblyLoadContext是为了在非Windows系统上运行。而libwkhtmltox是为了将HTML转换为PDF使用的底层工具。

SynchronizedConverter和PdfTools负责将HTML转换为PDF。

步骤三:创建生成PDF文档的服务

我们创建了一个名为PdfService.cs的服务,该服务负责将HTML转换为PDF。

using System.Threading.Tasks;
using DinkToPdf.Contracts;

public class PdfService : IPdfService
{
    private readonly IConverter _pdfConverter;

    public PdfService(IConverter pdfConverter)
    {
        _pdfConverter = pdfConverter;
    }

    public async Task<byte[]> CreatePDFAsync(string html)
    {
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings() { Top = 10 },
                Out = "output.pdf"
            },
            Objects = {
                new ObjectSettings() {
                    PagesCount = true,
                    HtmlContent = html,
                    WebSettings = { DefaultEncoding = "utf-8" },
                    HeaderSettings = { FontName = "Verdana", FontSize = 9 },
                    FooterSettings = { FontName = "Verdana", FontSize = 9, Line = true, Center = "footer" }
                }
            }
        };

        return await Task.Run(() => _pdfConverter.Convert(doc));
    }
}

该服务从接收的HTML字符串中创建一个新的HtmlToPdfDocument。这个对象有许多参数可以调整,例如纸张大小、页面边距、页眉、页脚等。通过传递这个HtmlToPdfDocument到PDF转换器的Converter方法,我们就可以将HTML转换为PDF。

步骤四:创建控制器来呈现PDF

我们创建了一个名为PdfController.cs的控制器,该控制器可以将生成的PDF文档呈现给用户。

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    private readonly IPdfService _pdfService;

    public PdfController(IPdfService pdfService)
    {
        _pdfService = pdfService;
    }


    [HttpGet]
    public async Task<IActionResult> Get()
    {
        var htmlContent = @"<html><head></head><body><h1>Hello, World!</h1></body></html>";
        var pdf = await _pdfService.CreatePDFAsync(htmlContent);

        return File(pdf, "application/pdf");
    }
}

在这个控制器中,我们调用CreatePDFAsync方法生成PDF并返回FileResult类型的PDF数据。

示例:

假设我们需要在ASP.NET Core应用程序中动态生成PDF,并将其作为返回值发送到客户端。我们需要首先在Nuget包管理器中安装以下程序包:

  • DinkToPdf 1.0.8-beta15
  • Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

然后,我们创建一个名为PdfService.cs的服务来生成PDF。这个服务的代码如下:

using System.Threading.Tasks;
using DinkToPdf;
using DinkToPdf.Contracts;

public class PdfService : IPdfService
{
    private readonly IConverter _converter;

    public PdfService(IConverter converter)
    {
        _converter = converter;
    }

    public async Task<byte[]> GeneratePdf(string html)
    {
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings() { Top = 10 },
            },
            Objects = {
                new ObjectSettings() {
                    PagesCount = true,
                    HtmlContent = html,
                    WebSettings = { DefaultEncoding = "utf-8" },
                }
            }
        };

        return await Task.Run(() => _converter.Convert(doc));
    }
}

接下来,我们需要创建一个名为PdfController.cs的控制器,该控制器将生成PDF文档并返回给客户端。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

namespace PdfGenerator.Pages
{
    [ApiController]
    [Route("api/[controller]")]
    public class PdfController : ControllerBase
    {
        private readonly ILogger<PdfController> _logger;
        private readonly IPdfService _pdfService;

        public PdfController(ILogger<PdfController> logger, IPdfService pdfService)
        {
            _logger = logger;
            _pdfService = pdfService;
        }

        [HttpGet]
        public async Task<IActionResult> Get()
        {
            var html = "<html><body><h1>Hello, World!</h1></body></html>";
            var bytes = await _pdfService.GeneratePdf(html);

            return File(bytes, "application/pdf");
        }
    }
}

我们可以通过调用生成PDF的API来测试我们的应用程序。通过在浏览器中输入以下地址,我们就可以看到生成的PDF文档:http://localhost:[port]/api/Pdf

阅读剩余 76%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core中快速构建PDF文档的步骤分享 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 各式各样的导航条效果css3结合jquery代码实现

    下面是关于“各式各样的导航条效果CSS3结合jQuery代码实现”的完整攻略。 什么是导航条效果 导航条效果通常用于网站的导航栏,以增强用户的交互体验。常见的导航条效果包括悬停提示、下拉菜单、纯CSS动画等等,它们可以通过CSS3和jQuery实现。 CSS3导航条效果示例 悬停提示 悬停提示通常用于在用户鼠标悬停在导航栏菜单上时显示该菜单的名称。 <…

    css 2023年6月10日
    00
  • dw中css选择器nthchild怎么使用?

    nth-child是CSS选择器中的一种,可以选择元素的第n个子元素。以下是关于nth-child的详细讲解,包括两个示例说明: 1. nth-child的语法 nth-child选择器的语法如下: :nth-child(n) 其中,n表示要选择的子元素的索引值。例如,:nth-child(2)表示选择第二个子元素。 nth-child选择器还可以使用关键字…

    css 2023年5月18日
    00
  • 深入理解CSS中的UI伪类

    深入理解CSS中的UI伪类,主要包括:active、:focus、:hover和:visited共四个伪类。 1. :active伪类 当鼠标按钮按下或者对元素进行输入时,:active伪类会生效。一般在实现按钮点击效果、链接点击效果等场景中会用到。 button:active { background-color: blue; } 以上代码会在按钮被点击的…

    css 2023年6月10日
    00
  • jQuery插件zTree实现的基本树与节点获取操作示例

    首先,我们需要了解以下知识点: zTree:一款基于 jQuery 的多功能树插件,官方网站为 http://www.treejs.cn 基本树的实现方式:通过在 HTML 中定义一个包含 id 属性的 元素,zTree 就会自动将其转换为一棵树。 节点的获取操作:可以使用 zTree 提供的一些方法获取节点,如:getNodes、getSelectedNo…

    css 2023年6月10日
    00
  • webpack4简单入门实例

    针对“webpack4简单入门实例”的完整攻略,我会分为以下几个部分进行详细讲解: 1.什么是webpack2.环境准备3.webpack配置入门4.样式加载及ES6转码入门5.多页应用Webpack处理6.插件及打包输出调整7.示例说明8.总结 一、什么是webpack Webpack是一个模块打包器,通过分析模块之间的依赖关系,将所有模块打包成一个或多个…

    css 2023年6月9日
    00
  • css使用客户端没有安装的字体语法解决方案

    使用 CSS 实现 Web 开发时,经常需要在页面或样式表中指定特定的字体来呈现文本。但是,如果用户没有安装指定的字体,则会有所不同,并且页面可能使用默认的字体来呈现文本,影响页面风格的一致性和美观性。 因此,如何在不安装字体的情况下,让网页的字体看上去和我们预期的完全一致呢?这就需要使用 CSS 3 提供的 @font-face 规则。下面是使用客户端没有…

    css 2023年6月9日
    00
  • web前端vue之CSS过渡效果示例

    下面是详细的“web前端vue之CSS过渡效果示例”的攻略。 1. 什么是CSS过渡效果 CSS过渡效果是指元素在改变样式时的动画效果。不同于直接瞬间改变样式,CSS过渡可以让这个过程更加柔和,增加用户的体验感。 2. 使用Vue中的过渡效果 在Vue中也可以使用CSS过渡效果来增强用户体验。Vue提供了三个内置的过渡类名: v-enter:进入过渡的开始状…

    css 2023年6月10日
    00
  • ASP.NET 动态写入服务器端控件

    ASP.NET 是一种基于 Web 的应用程序开发技术,它提供了一种在服务器端创建和维护 Web 应用程序的有效方式。在 Web 应用程序中,服务器端控件是一个非常重要的组成部分,它可以使开发人员能够在页面上动态地创建和修改控件,以便满足各种需求。本文将详细讲解 ASP.NET 中动态写入服务器端控件的攻略,包括创建控件、添加属性、添加事件和删除控件等。 创…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部