Sto cercando di convertire HTML in PDF con iTextSharp
in Rasoio MVC, ma tutto ciò che ho provato non ha funzionato. Qualcuno sa come realizzare questo?Convertire HTML in PDF in MVC con iTextSharp in MVC Razor
risposta
C'è un dettagliato e step-by-step tutorial
su CodeProject che potresti seguire. Illustra come potresti servire ASP.NET MVC Visualizza come file PDF usando iTextSharp per la conversione. Ricorda però che iTextSharp non era pensato per la conversione da HTML a PDF, quindi potrebbe non adattarsi molto bene a pagine HTML e stili CSS complessi.
Si consiglia di verificare RazorPDF che utilizza iText per generare il PDF, ma in un modo più amichevole.
Ciao Rosdi Kasim.Apparentemente l'ultima versione di iTextSharp (5.4.4) non funziona correttamente con RazorPDF e lo ha reso inutile. –
@real_yggdrasil Attenzione ... l'ultimo iTextSharp (a partire da 5.x) ha una licenza diversa. Anche 'reso inutile' non è utile .. prova a inviare la tua domanda con qualche esempio o descrizione dettagliata .. –
Non sono d'accordo. È stato reso inutile in quanto non fa nulla e non è stato aggiornato dal 2012. – Sinaesthetic
qui è possibile trovare un approccio diverso nel caso in cui si voglia scrivere xml semplice, lo trovo molto più semplice e leggero.
http://www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3
Ecco come si implementa questa soluzione utilizzando l'Razor motore NON con la strana <itext..
markup.
In questo modo si ha il pieno controllo della presentazione in formato pdf utilizzando l'output html standard.
Il progetto con un codice di esempio la soluzione e la sorgente è disponibile qui con le istruzioni di installazione Nuget:
https://github.com/andyhutch77/MvcRazorToPdf
Install-Package MvcRazorToPdf
Questo utilizza anche la nuova licenza iTextSharp, in modo da non soffre di nessuno degli aspetti negativi menzionato nelle altre risposte.
L'uomo, tu rock, grazie. Posso modificare l'orientamento della pagina in qualche modo? –
@EdgarSalazar Nessun problema. Poiché utilizza iTextXmlWorker sotto, penso che dovresti essere in grado di risolverlo modellando un div alle proporzioni del tuo paesaggio. – hutchonoid
E come posso farlo? Sono perso uomo. –
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();
}
basta passare html string
a parametro che stringa che si otterrà da renderpartialview text = viewname....
Questo è come farlo utilizzando 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();
}
La risposta utilizza 'HTMLWorker' , che è deprecato. Dovresti usare 'XMLWorker'. –
che genera errore XMLWorker non esiste nel contesto corrente –
Quale versione di iTextSharp stai usando? Puoi riprodurlo in iTextSharp 5.5.9? –
Un buon modo per convertire da MVC HTML Visualizza PDF (anche se non è direttamente sull'argomento per quanto riguarda iTextSharp) utilizza Rotativa:
Install-Package Rotativa
questo si basa su wkhtmltopdf
ma ha un migliore supporto css di iTextSharp ha ed è molto semplice da integrare con MVC, come si può semplicemente restituire la vista in formato pdf:
public ActionResult GetPdf()
{
//...
return new ViewAsPdf(model);// and you are done!
}
Ecco un esempio completo per MVC Razor in C# utilizzando il evo html to pdf for .net per convertire la vista corrente MVC in PDF e inviare il PDF portato al browser per il download:
[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;
}
voglio sapere che se iTextSharp non era per la conversione di HTML a PDF, che una connessione fonte? – Dhwani
SE OGGI DATA> 14.07.2015 NON GUARDARE A QUESTA RISPOSTA! – MDDDC
@ MDDDC perché no? Dove dovrei guardare allora? –