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

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

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

相关文章

  • 从几个方面聊聊页面重构中的一些问题

    本文将从以下几个方面详细讲解页面重构中的一些问题: 什么是页面重构? 为什么要进行页面重构? 页面重构的注意事项 页面重构的实践示例 什么是页面重构? 页面重构可以理解为将已有的页面代码进行重新整理、修改和优化的过程。其目的是提高页面的代码质量、优化用户体验、增强页面的可访问性和SEO(搜索引擎优化)效果等。 重构的具体方式可以是对HTML/CSS/JS等静…

    css 2023年6月11日
    00
  • Varlet组件实现一个丝滑的点击水波效果详解

    下面我将详细讲解如何通过Varlet组件实现一个丝滑的点击水波效果,并提供两个示例说明。 简介 Varlet是一套基于Vue3的移动端UI组件库,其设计初衷是为了提供更好的用户体验和提高前端开发效率。其中,点击水波效果是其组件非常常见且受欢迎的效果之一。 实现方法 Varlet提供了一个名为ripple的指令来实现点击水波效果。使用该指令,我们可以在任何元素…

    css 2023年6月11日
    00
  • Bootstrap Table使用心得总结

    Bootstrap Table使用心得总结 Bootstrap Table 是一款基于 Bootstrap 框架的表格插件,可以快速构建丰富、交互体验友好的数据表格。在实际项目中,Bootstrap Table 的应用十分广泛且易用,下面将介绍一些关于 Bootstrap Table 的使用心得。 安装和引用 在使用 Bootstrap Table 之前,需…

    css 2023年6月10日
    00
  • 浅谈css实现背景颜色半透明的两种方法

    下面是详细讲解“浅谈CSS实现背景颜色半透明的两种方法”的完整攻略: 1. 通过rgba()函数实现背景颜色半透明 使用 rgba() 函数可以很方便地实现背景颜色半透明。这个函数接受四个参数:红、绿、蓝和透明度,简写方式为 rgba(red, green, blue, alpha),其中 alpha 参数取值范围为 0 到 1 ,数值越小,透明度越高,数值…

    css 2023年6月9日
    00
  • CSS hack实现 CSS完美兼容IE6/IE7/FF的通用方法

    CSS hack是为了兼容不同浏览器所采用的编写CSS代码的技巧。下面是通用方法的攻略: 一、注释法 在CSS代码块中编写以下代码: .selector { color: red; /*所有浏览器应用此代码*/ _color: blue; /*只有IE6、IE7浏览器应用此代码,其他浏览器忽略*/ *color: yellow; /*IE6、IE7应用此代码…

    css 2023年6月10日
    00
  • AngularJs 国际化(I18n/L10n)详解

    AngularJs 国际化(I18n/L10n)详解 AngularJS国际化(I18n)指的是将应用程序的文本和其他本地化问题适应不同的语言和地区,以便您可以更好地扩展到全球市场,并且可以让全球的用户在自己的语言环境中使用你的应用程序。国际化是一个相当复杂的过程,并且需要相应工具包来实现它。在本文中,我们将了解如何使用AngularJS实现国际化。 步骤1…

    css 2023年6月10日
    00
  • 纯CSS实现一个简单步骤条的示例代码

    下面是详细的攻略: 1. 确定步骤条的样式和布局 首先,需要确定步骤条的整体样式和布局。可以选择水平还是垂直的布局,以及每个步骤节点的样式,如大小、颜色、字体、边框等。 例如,我们选择垂直布局,每个步骤节点都是圆形,中间有一条直线连接。步骤节点有三种状态,分别为已完成(绿色)、进行中(橙色)和未完成(灰色)。代码如下: /* 步骤条容器样式 */ .step…

    css 2023年6月10日
    00
  • 为什么网页变黑白色的了 如何解决网页变黑白色的问题

    网页变黑白色的原因可能有很多,下面将介绍几种可能导致网页变黑白色的原因,并提供相应的解决方法。 原因一:浏览器主题更改 有些浏览器,如Chrome浏览器,支持更改浏览器主题,而有些主题会导致网页变成黑白色调。若您不喜欢使用黑白主题,可以进入浏览器设置中的“主题”选项卡进行更改。 Chrome浏览器主题更改示例 打开Chrome浏览器; 在浏览器右上角点击三个…

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