【发布时间】:2009-04-25 07:00:03
【问题描述】:
通过 Crystal Reports 以外的 ASP.NET 应用程序创建 PDF 文件需要什么?
【问题讨论】:
通过 Crystal Reports 以外的 ASP.NET 应用程序创建 PDF 文件需要什么?
【问题讨论】:
您可以使用 iText#,它基于类似的 Java 项目。
http://itextsharp.sourceforge.net/
您不需要将 Crystal Reports 与此结合使用。如果您需要更强大(但价格昂贵)的东西,我已经用它来处理复杂的 PDF 取得了巨大的成功:
【讨论】:
一个可能的库是iTextSharp。显然 iText 是一笔巨大的交易,但我在使用 iTextSharp 处理某个需求时并没有真正看到它,但那是几年前的事了。
【讨论】:
最简单的方法是使用第三方库。我过去使用过 ASPOSE.PDF,效果很好。
http://www.aspose.com/categories/file-format-components/aspose.pdf-for-.net-and-java/default.aspx
我也尝试过 PDF Sharp,它是开源的,但没有那么灵活。
【讨论】:
你有几个开源选项here。
【讨论】:
protected void btnReport_Click(object sender, EventArgs e)
{
showReport();
}
private void showReport()
{
DataTable dat = Reports.getPartyWiseJobStatusReport(Convert.ToInt16(ddlDivName.SelectedValue), Convert.ToInt16(ddlJobGroup.SelectedValue), Convert.ToInt16(ddlProjectStatus.SelectedValue));
ReportDocument rptdoc = new ReportDocument();
string path = Server.MapPath("~/Reports/rptPartyWiseJobStatus.rpt");
rptdoc.Load(path);
rptdoc.SetDataSource(dat);
//rptdoc.SetParameterValue(0, ddlDivName.SelectedItem.Text);
//ExportOptions exportOpts1 = rptdoc.ExportOptions;
rptdoc.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
rptdoc.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
rptdoc.ExportOptions.DestinationOptions = new DiskFileDestinationOptions();
((DiskFileDestinationOptions)rptdoc.ExportOptions.DestinationOptions).DiskFileName = Server.MapPath("~/Reports/rptPartyWiseJobStatus.pdf");
rptdoc.Export();
rptdoc.Close();
rptdoc.Dispose();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=rptPartyWiseJobStatus.pdf");
Response.WriteFile("~/Reports/rptPartyWiseJobStatus.pdf");
Response.Flush();
Response.Close();
File.Delete(Server.MapPath("~/Reports/rptPartyWiseJobStatus.pdf"));
}
public static DataTable getPartyWiseJobStatusReport(Int16 DivisionID, Int16 JobGroup, Int16 ProjectStatus)
{ string _procName = "sp_T_Proposal_SelectPartyWiseJobStatus";
DataTable dt1 = new DataTable();
Database objDatabase = DatabaseFactory.CreateDatabase();
DbCommand objDbCommand = objDatabase.GetStoredProcCommand(_procName);
objDatabase.AddInParameter(objDbCommand, "@DivisionID", DbType.Int16, DivisionID);
objDatabase.AddInParameter(objDbCommand, "@JobGroup", DbType.Int16, JobGroup);
objDatabase.AddInParameter(objDbCommand, "@ProjectStatus", DbType.Int16, ProjectStatus);
using (IDataReader dr = objDatabase.ExecuteReader(objDbCommand))
{
dt1.Load(dr);
}
return dt1;
}
【讨论】: