ASP.NET MVC将包含Form的HTML页面转换为PDF

时间:2011-09-08 13:58:49

标签: asp.net-mvc asp.net-mvc-2 pdf

我正在使用ASP.NET MVC 2应用程序中的视图。此视图将包含固定文本,但它还将包含文本框,复选框以及可以从用户更新的Telerik Grid。 **此表格不是固定格式,因为可能会列出1 ... N个项目。 **我们希望能够将此视图打印为PDF。我们要打印的PDF将看起来像视图,但最好只有文本框中的文本而不是文本框边框。 Telerik网格也是如此。

你怎么建议我这样做?我希望在视图上看到一个可以直接将其打印成PDF的打印按钮。即没有弹出的辅助窗口。但这可能不是一个交易破坏者。

**更新** 让我们忘记一秒钟的表单元素。假设我的视图以与PDF格式相同的格式显示。如何将该视图打印成PDF?

3 个答案:

答案 0 :(得分:3)

最简单的方法是创建一个单独的Print操作,该操作返回动态生成的PDF的FileResult,其中包含iTextSharp

等库

您将无法像PDF文档中那样完全重复使用HTML表单,因为您不想使用文本框,但您可以生成与所需PDF匹配的HTML视图,然后使用iTextSharp保存HTML作为PDF格式。

或者,您可以使用iTextSharp库从头开始构建PDF并获得更多控制权,但这可能会有点困难。

从控制器中返回没有辅助窗口的PDF的最简单方法是让您的操作方法返回:

return File(iTextSharpByteArray, "application/pdf", "nameOfFileUserWillDownload.pdf");

答案 1 :(得分:0)

大多数免费的开源PDF .dll很难以编程方式在PDF中创建HTML(主要是由于对HTML标签的支持有限等)。

付出一个更简单,例如。 http://www.html-to-pdf.net/使用此功能,您只需将转换器指向模板页面即可。甚至javascript和Flash内容等也将被解析并(静态地)包含在最终的PDF中。

答案 2 :(得分:0)

您可以根据需要制作rdlc报告,并通过控制器功能点击视图中的打印按钮/链接进行呼叫。

在您的视图中

    Html.ActionLink("Print", "Print", new { id = c.sid }) 

在您的控制器中

    public ActionResult Print(int id)
            {
                string unitc = Session["unit"].ToString();

                ctid= unitc;//class level variable used in detailreport function  
                brid = id;//class level variable used in detailreport function
                return DetailsReport();

            }



    FileContentResult DetailsReport()
        {

            LocalReport localReport = new LocalReport();

            localReport.ReportPath = Server.MapPath("~/Reports/rptinvoice.rdlc");

            InvoiceRepository ivr = new InvoiceRepository();

            if (localReport.DataSources.Count > 0)
            {
                localReport.DataSources.RemoveAt(0);
                localReport.DataSources.RemoveAt(1);
                localReport.DataSources.RemoveAt(2);

            }
            localReport.Refresh();

            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", ivr.GetSales(ctid));

            localReport.SetParameters(new ReportParameter[] { new ReportParameter("ct_id", ctid.ToString()), new ReportParameter("ct_br_id", brid.ToString()) });


            localReport.DataSources.Add(reportDataSource);


            string reportType = "PDF";

            string mimeType;

            string encoding;

            string fileNameExtension;




            string deviceInfo =

            "<DeviceInfo>" +

            "  <OutputFormat>PDF</OutputFormat>" +

            "  <PageWidth>8.5in</PageWidth>" +

            "  <PageHeight>11in</PageHeight>" +

            "  <MarginTop>0.2in</MarginTop>" +

            "  <MarginLeft>0.05in</MarginLeft>" +

            "  <MarginRight>0.05in</MarginRight>" +

            "  <MarginBottom>0.1in</MarginBottom>" +

            "</DeviceInfo>";



            Warning[] warnings;

            string[] streams;

            byte[] renderedBytes;

            localReport.EnableExternalImages = true;

            //Render the report

            try
            {

            renderedBytes = localReport.Render(

            reportType,

            deviceInfo,

            out mimeType,

            out encoding,

            out fileNameExtension,

            out streams,

            out warnings);



            }
            catch (Exception Ex)
            {
                ViewData["ResultP"] = Ex.Message + ",<br>" + Ex.InnerException.Message;
                throw;
            }


            return File(renderedBytes, mimeType);

        }