我正在使用ASP.NET MVC 2应用程序中的视图。此视图将包含固定文本,但它还将包含文本框,复选框以及可以从用户更新的Telerik Grid。 **此表格不是固定格式,因为可能会列出1 ... N个项目。 **我们希望能够将此视图打印为PDF。我们要打印的PDF将看起来像视图,但最好只有文本框中的文本而不是文本框边框。 Telerik网格也是如此。
你怎么建议我这样做?我希望在视图上看到一个可以直接将其打印成PDF的打印按钮。即没有弹出的辅助窗口。但这可能不是一个交易破坏者。
**更新** 让我们忘记一秒钟的表单元素。假设我的视图以与PDF格式相同的格式显示。如何将该视图打印成PDF?
答案 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);
}