2013-05-13 7 views

risposta

2

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.

+1

voglio sapere che se iTextSharp non era per la conversione di HTML a PDF, che una connessione fonte? – Dhwani

+5

SE OGGI DATA> 14.07.2015 NON GUARDARE A QUESTA RISPOSTA! – MDDDC

+1

@ MDDDC perché no? Dove dovrei guardare allora? –

4

Si consiglia di verificare RazorPDF che utilizza iText per generare il PDF, ma in un modo più amichevole.

+3

Ciao Rosdi Kasim.Apparentemente l'ultima versione di iTextSharp (5.4.4) non funziona correttamente con RazorPDF e lo ha reso inutile. –

+0

@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 .. –

+1

Non sono d'accordo. È stato reso inutile in quanto non fa nulla e non è stato aggiornato dal 2012. – Sinaesthetic

34

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.

+1

L'uomo, tu rock, grazie. Posso modificare l'orientamento della pagina in qualche modo? –

+0

@EdgarSalazar Nessun problema. Poiché utilizza iTextXmlWorker sotto, penso che dovresti essere in grado di risolverlo modellando un div alle proporzioni del tuo paesaggio. – hutchonoid

+0

E come posso farlo? Sono perso uomo. –

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();  
} 

basta passare html string a parametro che stringa che si otterrà da renderpartialview text = viewname....

0

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(); 
} 
+0

La risposta utilizza 'HTMLWorker' , che è deprecato. Dovresti usare 'XMLWorker'. –

+0

che genera errore XMLWorker non esiste nel contesto corrente –

+0

Quale versione di iTextSharp stai usando? Puoi riprodurlo in iTextSharp 5.5.9? –

2

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! 
} 
2

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; 
}