Подтвердить что ты не робот

Преобразование HTML в PDF в MVC с помощью iTextSharp в MVC Razor

Я пытаюсь преобразовать HTML в PDF с iTextSharp в MVC Razor, но все, что я пробовал, не сработало. Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

В коде CodeProject вы можете найти подробный и step-by-step tutorial. Он иллюстрирует, как вы можете использовать ASP.NET MVC View в виде файла PDF, используя iTextSharp для преобразования. Имейте в виду, что iTextSharp не предназначался для преобразования HTML в PDF, поэтому он мог бы не очень хорошо справляться со сложными HTML-страницами и стилями CSS.

Ответ 2

Вот как вы реализуете это решение, используя Razor движок НЕ со странной разметкой <itext...

Таким образом, вы полностью контролируете презентацию pdf, используя стандартный вывод html.

Проект с примером решения и исходным кодом доступен здесь с инструкциями по установке nuget:

https://github.com/andyhutch77/MvcRazorToPdf

Install-Package MvcRazorToPdf

Это также использует новую лицензию itextsharp, поэтому не страдает от каких-либо негативов, упомянутых в других ответах.

Ответ 3

Вы должны проверить RazorPDF, который использует iText для создания PDF файла, но более дружелюбным способом.

Ответ 4

public virtual void printpdf(string html)    
{
     String htmlText = html.ToString();
     Document document = new Document();
     string filePath = HostingEnvironment.MapPath("~/Content/Pdf/");
     PdfWriter.GetInstance(document, new FileStream(filePath + "\\pdf-"+Filename+".pdf", FileMode.Create));

     document.Open();    
     iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);       
     hw.Parse(new StringReader(htmlText));    
     document.Close();    
}

просто передать html string в параметр эту строку вы получите через renderpartialview text = viewname....

Ответ 5

Хороший способ конвертировать из MVC HTML View в PDF (даже если он не относится непосредственно к теме iTextSharp) использует Rotativa

Install-Package Rotativa

Это основано на wkhtmltopdf, но имеет лучшую поддержку css, чем iTextSharp, и очень просто интегрироваться с MVC, поскольку вы можете просто вернуть представление в формате pdf:

public ActionResult GetPdf()
{
    //...
    return new ViewAsPdf(model);// and you are done!
}

Ответ 6

Вот полный пример для MVC Razor в С#, используя evo html to pdf для .net, чтобы преобразовать текущее представление MVC в PDF и отправьте полученный PDF в браузер для загрузки:

[HttpPost]
public ActionResult ConvertCurrentPageToPdf(FormCollection collection)
{
    object model = null;
    ViewDataDictionary viewData = new ViewDataDictionary(model);

    // The string writer where to render the HTML code of the view
    StringWriter stringWriter = new StringWriter();

    // Render the Index view in a HTML string
    ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, "Index", null);
    ViewContext viewContext = new ViewContext(
            ControllerContext,
            viewResult.View,
            viewData,
            new TempDataDictionary(),
            stringWriter
            );
    viewResult.View.Render(viewContext, stringWriter);

    // Get the view HTML string
    string htmlToConvert = stringWriter.ToString();

    // Get the base URL
    String currentPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri;
    String baseUrl = currentPageUrl.Substring(0, currentPageUrl.Length - "Convert_Current_Page/ConvertCurrentPageToPdf".Length);

    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

    // Convert the HTML string to a PDF document in a memory buffer
    byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlToConvert, baseUrl);

    // Send the PDF file to browser
    FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");
    fileResult.FileDownloadName = "Convert_Current_Page.pdf";

    return fileResult;
}

Ответ 8

Вот как это сделать, используя MVC:

[Route("ABCDD")]
[HttpGet]
public void ABCDD() {
    WebClient wc = new WebClient();
    // string url = HttpContext.Current.Request.Url.AbsoluteUri;
    string url = "http://localhost:3042/Reports/COAListing";
    string fileContent = wc.DownloadString(url);

    List<string> tableContents = GetContents(fileContent, table_pattern);

    string HTMLString = String.Join(" ", tableContents.ToArray());

    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);
    pdfDoc.Open();
    pdfDoc.Add(new Paragraph("Welcome to dotnetfox"));
    List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(HTMLString), null);
    for (int k = 0; k < htmlarraylist.Count; k++) {
        pdfDoc.Add((IElement) htmlarraylist[k]);
    }

    pdfDoc.Close();
    HttpContext.Current.Response.ContentType = "pdf/application";
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;" +
            "filename=sample.pdf");
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.Write(pdfDoc);
    HttpContext.Current.Response.End();
}