Какие варианты у нас есть, чтобы создать PDF-файл из ASP.NET Core Web Api - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно создать PDF из HTML-холста, но процесс должен завершиться на стороне сервера, которая является ASP.NET Core Web Api.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019
using IronPdf;
IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();
// Render an HTML document or snippet as a string
Renderer.RenderHtmlAsPdf("<h1>Hello World</h1>").SaveAs("html-string.pdf");
// Advanced: 
// Set a "base url" or file path so that images, javascript and CSS can be loaded  
var PDF = Renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>",@"C:\site\assets\");
PDF.SaveAs("html-with-assets.pdf");

введите описание ссылки здесь

0 голосов
/ 28 сентября 2019

То, что я хотел бы предложить, это Spire PDF , это действительно просто и выполняет свою работу.Это действительно полезно при печати PDF-файлов таблиц и т. Д. Вы можете установить нижний колонтитул и верхний колонтитул и все.Единственным ограничением является то, что вы можете печатать до 10 страниц в бесплатной версии в формате PDF.Вот ссылка

https://www.e -iceblue.com / Int вводить / pdf-for-net-ввод.html # .XY7YjUZKgWU

Есть Как сделатьТакже доступны справочники .

0 голосов
/ 27 сентября 2019

На стороне сервера вы можете вывести HTML вида как string и использовать любую библиотеку, которая генерирует PDF из HTML string.чтобы отобразить представление в string см. эту ссылку Возврат представления в виде строки в .NET Core после получения HTML, вам нужно передать его в библиотеку, см. эту ссылку для преобразования HTML в string Преобразование HTML в PDF в .NET

1 Создание метода расширения C # для отображения представления в строку

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.IO;
using System.Threading.Tasks;

namespace CC.Web.Helpers
{
    public static class ControllerExtensions
    {
        public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
        {
            if (string.IsNullOrEmpty(viewName))
            {
                viewName = controller.ControllerContext.ActionDescriptor.ActionName;
            }

            controller.ViewData.Model = model;

            using (var writer = new StringWriter())
            {
                IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
                ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);

                if (viewResult.Success == false)
                {
                    return $"A view with the name {viewName} could not be found";
                }

                ViewContext viewContext = new ViewContext(
                controller.ControllerContext,
                viewResult.View,
                controller.ViewData,
                controller.TempData,
                writer,
                new HtmlHelperOptions()
            );

                await viewResult.View.RenderAsync(viewContext);

                return writer.GetStringBuilder().ToString();
            }
        }
    }
} 

2) Отображение представления в строку

viewHtml = await this.RenderViewAsync("Report", model);

3) Используйте HTML для создания PDF

    Byte[] res = null;
    using (MemoryStream ms = new MemoryStream())
    {
        var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(viewHtml, PdfSharp.PageSize.A4);
        pdf.Save(ms);
        res = ms.ToArray();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...