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日

相关文章

  • jQuery实现带滚动导航效果的全屏滚动相册实例

    准备工作: 本实例需要用到jQuery、fullpage.js和TweenMax.js,所以在开始之前要确保已经引入了这些库文件。 <head> <script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script…

    css 2023年6月10日
    00
  • web前端性能优化之合理的优化网站图片可以带来更多的流量

    web前端性能优化之合理的优化网站图片可以带来更多的流量 为什么需要优化网站图片? 在网站开发中,图片通常会占据很大一部分网络带宽,是影响网站性能的重要因素之一。因此,对于网站图片的优化,可以提高网站的性能,提升用户体验和搜索引擎排名,进而带来更多的流量。 优化网站图片的方法 1. 选择合适的图片格式 图像格式的选择是优化网站图片的关键。常见的图像格式有JP…

    css 2023年6月10日
    00
  • BootStrap Table对前台页面表格的支持实例讲解

    BootStrap Table对前台页面表格的支持实例讲解 简介 Bootstrap Table是一个基于Bootstrap框架的扩展,提供了丰富的功能,用于前端页面显示表格数据,并支持与后台数据的交互和分页等功能。通过使用Bootstrap Table,我们可以大大简化前端页面表格数据的处理,提高前端页面数据展示的效率和美观程度。本文将对Bootstrap…

    css 2023年6月10日
    00
  • 利用CSS3 动画 绘画 圆形动态时钟

    关于“利用CSS3动画绘画圆形动态时钟”这个主题,我可以提供以下完整攻略: 1. 初步准备 在编写CSS3动画之前,请确保已经了解了以下基础知识: HTML基础知识 基础CSS的基础知识和语法 CSS3的动画和变换知识 在你开始编写CSS3动画之前,请先创建一个新的HTML文件,然后添加必要的HTML标记(例如文件头信息、HTML标签和空等待填充的容器等)。…

    css 2023年6月10日
    00
  • CSS border-style 属性使用方法

    当我们在使用CSS对网页进行样式设计时,经常需要设置一个元素的边框样式。CSS提供了border-style属性,用于设置元素边框的样式,可以实现简单的边框效果或复杂的边框图案。 一、border-style 属性详解 border-style用于设置元素边框的样式,支持以下值: solid dashed dotted double groove ridge…

    css 2023年6月10日
    00
  • 一款纯css3实现的非常实用的鼠标悬停特效演示

    下面是详细的攻略: 纯CSS3实现非常实用的鼠标悬停特效 1. 准备工作 在开始实现鼠标悬停特效之前,我们需要先准备好HTML和CSS文件,并创建相应的结构和样式。 HTML部分的结构比较简单,可以根据自己的需要进行修改。下面是一个简单的示例: <div class="box"> <div class="con…

    css 2023年6月10日
    00
  • fixed固定定位transofrm失效的解决

    当一个元素有fixed定位属性时,会将该元素相对于浏览器窗口进行定位,并且该元素会从文档流中脱离,不再影响其他元素的位置。在此情况下使用transform属性进行变换时,可能会遇到失效的问题。下面介绍几种解决方法。 方法一:使用translate代替transform 将transform属性替换成translate属性来解决该问题,因为translate属…

    css 2023年6月10日
    00
  • html中table为每个单元格设置不同颜色和宽度

    要在HTML中为每个单元格设置不同颜色和宽度,需要使用CSS。以下是详细的步骤: 第一步:创建HTML表格 在HTML中使用<table>标签创建表格,并使用<tr>标签创建每一行,<td>标签创建每个单元格。以下是一个简单的例子: <table> <tr> <td>Row 1, Cel…

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