2013-05-13 8 views

Odpowiedz

2

Jest szczegółowy i step-by-step tutorial na CodeProject, który możesz wykonać. To ilustruje, w jaki sposób można wyświetlić widok ASP.NET MVC jako plik PDF, używając iTextSharp do konwersji. Pamiętaj jednak, że iTextSharp nie był przeznaczony do konwersji HTML na PDF, więc może nie radzić sobie bardzo dobrze ze złożonymi stronami HTML i stylami CSS.

+1

Chcę wiedzieć, że jeśli iTextSharp nie była przeznaczona do konwersji HTML do PDF, który jeden z darmo źródło? – Dhwani

+5

JUŻ DZISIAJ> 14.07.2015 NIE PATRZEJ TEGO ODPOWIEDZI! – MDDDC

+1

@MDDDC dlaczego nie? Gdzie powinienem wtedy patrzeć? –

4

Powinieneś sprawdzić RazorPDF, który używa iText do wygenerowania pliku PDF, ale w bardziej przyjazny sposób.

+3

Witaj Rosdi Kasim.Wygląda na to, że najnowsza wersja iTextSharp (5.4.4) nie działa poprawnie z RazorPDF i uczyniła go bezużytecznym. –

+0

@real_yggdrasil Bądź ostrożny .. najnowszy iTextSharp (począwszy od 5.x) ma inną licencję. Również "renderowane bezużyteczne" nie jest pomocne. Spróbuj przesłać pytanie z przykładowym lub szczegółowym opisem. –

+1

Nie zgadzam się. Stało się bezużyteczne, ponieważ nic nie robi i nie było aktualizowane od 2012 roku. – Sinaesthetic

34

Oto jak zaimplementować to rozwiązanie za pomocą Razor silnik NIE z dziwnym <itext.. znaczników.

W ten sposób masz pełną kontrolę nad prezentacją pdf przy użyciu standardowego wyjścia html.

Projekt z kodem Przykład rozwiązania i źródłowy jest dostępny tutaj z Nuget Instrukcja instalacji:

https://github.com/andyhutch77/MvcRazorToPdf

Install-Package MvcRazorToPdf 

ten wykorzystuje również nową licencję iTextSharp, więc nie cierpi z jednego z negatywów wymienione w innych odpowiedziach.

+1

Człowieku, ty rock, dzięki. Czy mogę jakoś zmienić orientację strony? –

+0

@EdgarSalazar Bez problemu. Ponieważ używa pod nim iTextXmlWorker, myślę, że powinieneś być w stanie rozwiązać ten problem, stylizując div na proporcje krajobrazu. – hutchonoid

+0

A jak mam to zrobić? Jestem zagubionym człowiekiem. –

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

prostu przekazać html string do parametru że ciąg dostaniesz przez renderpartialview text = viewname....

0

To jak to zrobić za pomocą 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

Twoja odpowiedź używa 'HTMLWorker' , który jest przestarzały. Powinieneś użyć 'XMLWorker'. –

+0

to daje błąd XMLWorker nie istnieje w bieżącym kontekście –

+0

Jaką wersję iTextSharp używasz? Czy możesz go odtworzyć w iTextSharp 5.5.9? –

2

Dobry sposób na konwersję z MVC HTML Wyświetl do pliku PDF (nawet jeśli nie dotyczy on bezpośrednio iTextSharp), używa się: Rotativa:

Install-Package Rotativa 

ta opiera się na wkhtmltopdf ale ma lepsze wsparcie css niż iTextSharp posiada i jest bardzo prosty w integracji z MVC, jak można po prostu wrócić pogląd jako PDF:

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

Powyżej znajduje się pełna przykładem MVC Razor w C# za pomocą evo html to pdf for .net konwertować bieżącego widoku MVC do PDF i wysłać spowodowało PDF do przeglądarki do pobrania:

[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; 
} 
Powiązane problemy