Я пытаюсь преобразовать HTML в PDF с iTextSharp
в MVC Razor, но все, что я пробовал, не сработало. Кто-нибудь знает, как это сделать?
Преобразование HTML в PDF в MVC с помощью iTextSharp в MVC Razor
Ответ 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;
}
Ответ 7
здесь вы можете найти другой подход, если вы хотите написать простой xml, я нахожу его намного проще и легче.
http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3
Ответ 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();
}