Blazor页面生成HTML到PDF

5
我想打印一个渲染的模态框,其中包含一些车辆信息。按钮位于模态框上,点击后应将模态框HTML转换为PDF。
请告知是否有可用的C#函数或其他方法,可以提取我要转换为PDF的当前HTML,或指导我正确的方向。我只学习了大约2个月的C#,缺乏经验和专业知识。
编辑:还尝试使代码在转储PDF时使用CSS。
我已添加以下代码。
已添加引用等。
@using BidWheels.Configuration;
@using BidWheels.Shared.Controls;
@using BidWheels.Data;
@using BidWheels.CustomProviders;
@using BidWheels.Services;
@using System.Timers;
@using Syncfusion.Pdf;
@using Syncfusion.HtmlConverter;
@using System.Linq;
@using System.Web;
@using Microsoft.AspNetCore.Http;

@inject AppState AppState;
@inject UsersDAL UsersDAL;
@inject MainDAL MainDAL;
@inject NotificationService NotificationService;
@inject GeneralConfiguration GeneralConfiguration;
@inject GlobalVar GlobalVar;
@inject GlobalVarShared GlobalVarShared;
@inject Microsoft.JSInterop.IJSRuntime JS
@inject IHttpContextAccessor httpContextAccessor
        </div>
        <button class="btn btn-outline-success" @onclick="@CreatePDF">Generate PDF</button>
    </div>

这是由按钮调用的函数。

@functions {

    void CreatePDF() 
    {

>         //Initialize HTML to PDF converter
>         //HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter(HtmlRenderingEngine.WebKit);
>         //WebKitConverterSettings settings = new WebKitConverterSettings();
>         //Set WebKit path
>         //settings.WebKitPath = Server.MapPath("~/QtBinaries");
>         //Assign WebKit settings to HTML converter
>         //htmlConverter.ConverterSettings = settings;
>         //Get the current URL
>         //string url = HttpContext;
>         //Convert URL to PDF
>         //PdfDocument document = htmlConverter.Convert(url);
>         //Save the document
>         //document.Save("Sample.pdf", HttpContext.Current.Response, HttpReadType.Save);

Code updated to below
        HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
        WebKitConverterSettings webKitSettings = new WebKitConverterSettings();
        webKitSettings.WebKitPath = Directory.GetCurrentDirectory() + "\\wwwroot" + @"\QtBinariesWindows\";
        webKitSettings.MediaType = MediaType.Print;
        webKitSettings.Orientation = PdfPageOrientation.Portrait;
        htmlConverter.ConverterSettings = webKitSettings;
        Convert HTML to PDF.
        string baseUrl = @"" + Directory.GetCurrentDirectory() + "/wwwroot/css/";
        string HTMLBody = await JS.InvokeAsync<string>("getHTMLtoRender", PDFBody);
        PdfDocument pdfDocument = htmlConverter.Convert(HTMLBody, baseUrl);
        MemoryStream memoryStream = new MemoryStream();
        Save and close the document instance.
        pdfDocument.Save(memoryStream);
        JS.SaveAs("Sample.pdf", memoryStream.ToArray());

    }

}

以下是产生的错误。
以上代码生成的错误消息:

Error messages generated by the code for the above

新错误生成和库:

New errors generated and lib


在 Blazor 中访问 HttpContext 不是可行的解决方案。如果您需要将应用程序切换为 WASM 应用程序,它将无法工作,因为 Blazor 的主要目标是在浏览器中运行。请改用 Web API。如果仍然想访问当前的 HttpContext,请尝试此解决方案 https://dev59.com/5lQJ5IYBdhLWcg3wdVkW - agua from mars
我知道这是一个老问题,但我注意到一个新的博客文章 - 2023年4月11日 - 正好讨论这个问题:https://www.c-sharpcorner.com/article/how-to-create-pdf-using-itextsharp-in-blazor/。我还没有尝试过,所以你的结果可能会有所不同! - phuzi
4个回答

1

将Razor组件渲染为以下HTML字符串:

var host = new TestHost();
var component = host.AddComponent<YourComponent>();
var html = component.GetMarkup();

然后将此字符串传递给IronPdf库,以为您生成PDF。

using IronPdf;
var Renderer = new IronPdf.ChromePdfRenderer();
var PDF = Renderer.RenderHtmlAsPdf(html);

参考资料

  1. stackoverflow 链接:如何将 Blazor 组件渲染成 HTML 字符串
  2. IronPdf:IronPdf 网站

1
我发现编程处理PDF非常困难。 如果您确实需要编程方式,请查看此链接: .NET中将HTML转换为PDF。 否则,我建议您使用浏览器的打印功能和一个打印到PDF工具,至少在我看到的每个系统上都已经安装了一个。

0

0
一旦您按照 这里 所述创建了 PDF,就可以使用 Append.Blazor.Printing 来获取本地打印对话框。您可以在 这里 查看相关博文。

example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接