ASP.NET MVC Преобразование HTML-страницы, содержащей форму, в PDF - PullRequest
2 голосов
/ 08 сентября 2011

Я работаю над представлением в приложении ASP.NET MVC 2.Это представление будет содержать фиксированный текст, но оно также будет содержать текстовые поля, флажки и, возможно, Telerik Grid, который можно обновить от пользователя.** Эта форма не имеет фиксированного формата, поскольку в списке может быть 1 ... N элементов.** Мы хотим иметь возможность распечатать это представление в PDF.PDF-файл, который мы хотим распечатать, будет просто выглядеть как вид, но предпочтительно в нем будет только текст из текстовых полей, а не граница текстового поля.То же самое касается сетки Telerik.

Как вы рекомендуете делать это?Предпочтительно мне нравится видеть кнопку печати в представлении, которое будет напрямую печатать ее в PDF.т.е. нет вторичного окна, которое всплывает.Это не может быть нарушителем сделки, хотя.

** Обновление ** Давайте на секунду забудем об элементах формы.Допустим, мое представление отображается в том же формате, который я хочу в моем PDF.Как распечатать это представление в PDF?

Ответы [ 3 ]

3 голосов
/ 08 сентября 2011

Самый простой способ сделать это - создать отдельное действие Print, которое возвращает FileResult PDF, сгенерированного на лету, с библиотекой, подобной iTextSharp

Вы не сможетеполностью используйте форму HTML, как в документе PDF, поскольку вы не хотите использовать текстовые поля, но вы можете создать представление HTML, соответствующее вашему PDF, и затем использовать iTextSharp, чтобы сохранить этот HTML как PDF.

В качестве альтернативы, вы можете использовать библиотеку iTextSharp для создания PDF с нуля и иметь гораздо больший контроль, но это может быть немного сложнее.

С вашего контроллера самый простой способ вернуть PDF безвторичное окно должно вернуть ваш метод действия:

return File(iTextSharpByteArray, "application/pdf", "nameOfFileUserWillDownload.pdf");
0 голосов
/ 10 сентября 2011

Вы можете сделать отчет 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);

        }
0 голосов
/ 08 сентября 2011

Большинство бесплатных PDF-файлов с открытым исходным кодом сложно программно создать HTML в PDF (в основном из-за ограниченной поддержки тегов HTML и т. Д.).

Платить за него гораздо проще, например. http://www.html -to-pdf.net / При этом вы можете просто указать конвертеру страницу шаблона, и она будет работать. Даже javascript, Flash-контент и т. Д. Также будут проанализированы и включены (статически) в окончательный PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...