【问题标题】:PDF Implementation in dotnet Core - DinkTOPdf [closed]dotnet Core 中的 PDF 实现 - DinkTOpdf [关闭]
【发布时间】:2020-06-27 14:49:54
【问题描述】:

dinktopdf nugget 的实现 掘金链接: https://www.nuget.org/packages/Haukcode.DinkToPdf/1.1.2?_src=template

谁能分享在 .netCore 中生成 pdf 文件的步骤? 如何在将文件作为流发送以生成 pdf 之前生成模板?

如何在 Startup.cs 中注入依赖?

【问题讨论】:

    标签: .net-core pdf-generation dinktopdf


    【解决方案1】:

    实施步骤:

    public class PdfExportTemplateBuilder : BaseTemplate
        {
    public static string BuildTemplate(EmployeeDetails employessDetails, string id, string name)
            {
                var html = File.ReadAllText(Path.Combine(GetCurrentFolder(), @"EMPLOYEE\Template.Pdf.Employee.html")); //create the folder in current Assembly
                html = html.Replace(ID_PLACEHOLDER, string.IsNullOrWhiteSpace(id) ? "---" : id);
                html = html.Replace(NAME_PLACEHOLDER, string.IsNullOrWhiteSpace(name) ? "---" : name);
                html = html.Replace(REPORT_DATE, DateTime.UtcNow.ToString());
                html = html.Replace(REPORT_YEAR, DateTime.UtcNow.Year.ToString());
                var template = Handlebars.Compile(html);
                return template(employessDetails);
            }
    }
    
       public class BaseTemplate
        {
    
            protected const string ID_PLACEHOLDER= "{{ID}}";
            protected const string NAME_PLACEHOLDER= "{{NAME}}";
         }
    
    • 传递 html 模板以转换为 PDF
     public async Task<Stream> DownloadPdfAsync(User loggedInUser, string name)
            {
                
                        var html = PdfExportTemplateBuilder .BuildTemplate(employeeDetails,id,name);
                        var conversionOptions = new ConversionOptions
                        {
                            Margins = new MarginSettings(10, 5, 10, 5),
                        };
    
                        var pdfStream = new MemoryStream(_htmlToPdfConverter.ConvertHtml(html, conversionOptions));
                        pdfStream.Position = 0;
    
                        return pdfStream; //returns file as stream 
    //Access as  return File(result, "application/pdf", "EmployeeDetails.pdf") from calling function.
                    }
               
            }
    
    • _htmlToPdfConverter 实现
    public class HtmlToPdfConverter : IHtmlToPdfConverter
        {
            private readonly IConverter _converter;
    
            private const string FontName = "Arimo, Arial, Helvetica, sans-serif";
            private const string CenterFooterText = "Page [page] of [toPage]";
            private const string RightFooterTextFormat = "Report Date: {0}";
            private const int FontSize = 6;
            private const double Spacing = 7;
    
            public HtmlToPdfConverter(IConverter converter) => _converter = converter;
    
            public byte[] ConvertHtml(string html, ConversionOptions conversionOptions)
            {
                var doc = new HtmlToPdfDocument()
                {
                    GlobalSettings = {
                        ColorMode = ColorMode.Color,
                        Orientation = Orientation.Portrait,
                        PaperSize = PaperKind.A4,
                        Margins = conversionOptions.Margins,
                    },
                    Objects = {
                        new ObjectSettings() {
                            PagesCount = true,
                            HtmlContent = html,
                            WebSettings = { EnableIntelligentShrinking = false },
                            FooterSettings = {
                                FontSize = FontSize,
                                FontName = FontName,
                                Right = string.Format(RightFooterTextFormat, DateTime.UtcNow.ToString()),
                                Center = CenterFooterText,
                                Spacing = Spacing
                            }
                        }
                    }
                };
    
                return _converter.Convert(doc);
            }
        }
    
    • 在 Startup.cs 中注入依赖项(用于 .Net 核心)
                services.AddSingleton<IHtmlToPdfConverter, HtmlToPdfConverter>();
                services.AddSingleton(typeof(IConverter), new 
                SynchronizedConverter(new PdfTools()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2023-04-03
      • 2021-11-20
      • 2019-05-09
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多