Creare PDF
Visual Studio .NET ci aiuta a realizzare report e file .pdflavorando semplicemente con l'interfaccia grafica senzamettere mano sul codice.
Questo codice mostra come creare un DataSer e un file CrystalReport (.rpt) senza utilizzare Visual Studio (per esempioutilizzando WebMatrix). E' presupposto, tuttavia, che voiabbiate accesso alle DLL di Crystal Reports.
Ecco i passaggi per creare un file pdf:
1. Copiare il file EmployeeReport in unacartella ASP.NET
2. Importante: E' necessario che questacartella sia una cartella WEB e non una sottocartella di unacartella WEB. Questo è necessario per far funzionarela directory in
3. Creare la cartella in e copiata i duefile .dll"CrystalDecisions.CrystalReports.Engine.dll" e"CrystalDecisions.Shared.dll" all'interno diquesta cartella. (Avendo Crystal Report trovate questi filequi: X:Program FilesCommon FilesCrystalDecisions1.1Managed)
4. Indirizzare il proprio browser al tuofile .aspx, es. http://localhost/... Verrà creato ilfile Employees.xsd.
5. In Crystal Reports, create un report daun ADO.NET XML data source. Quanto ti viene richiesto un fileXML, indicare il file .xsd. Crea il report come un qualsiasialtro report dai campi della Tabella fornita.
6. Importante: clicca in File edisabilitare la funziona "Salva report con Dati".Questo ti servirà ad utilizzare il tuo file .rpt da unDataSet run-time, altrimenti ignora il DataSet e rimanesempre vuoto.
7. Salva il tuo Report come"Employees.rpt" nella tua cartella WEB.
8. Ora nel tuo file .aspx cambia lavariabile d'azione in "CreatePdf" e aggiorna lapagina nel tuo browser. Dovresti vedere un link a"Employees.pdf". Cliccaci sopra e vedrai il tuofile PDF creato da una combinazione del Dataset con il fileRPT. Attenzione: la linea "dt.TableName ="Table";" è molto importante. Se cambiquesto nome, allora la tua tabella non può dare leinformazioni al report.
<%@ Page Language="C#" Debug="true" %><%@ import Namespace="CrystalDecisions.CrystalReports.Engine" %><%@ import Namespace="CrystalDecisions.Shared" %><%@ import Namespace="System.Data" %><%@ import Namespace="System.IO" %><%@ import Namespace="System.Xml" %><%@ import Namespace="System.Text" %><script runat="server"> public void Page_Load(Object sender, EventArgs E) { //*** ISTRUZIONI: //definire un'azione per questo programma //1. Imposta l'azione a: "CreateSchemaFile" //2. Avvia il programma e sarà creato il file .xsd //3. creare un report crystal basato su questo file //4. quindi impostare in modo permanente l'azione in "CreatePdf" //IL COMANDO: string action = "CreatePdf"; //VARIABILI string tableName = "fin"; string rptFile = "fin.rpt"; string xsdFile = "fin.xml"; string pdfFile = "fin.pdf"; //crea il file .xsd (solo la prima volta) o il file PDF if(action.ToUpper() == "CREATESCHEMAFILE") {DataTable dt = new DataTable();dt = DummyTable();DataSet ds = new DataSet();ds.Tables.Add(dt);CreateSchemaFile(xsdFile,ds);Response.Write("Il file XSD è stato creato:<br/><br/> <b>" + Server.MapPath(xsdFile) + "</b><br/><br/>");Response.Write("Usa questo per creare il tuo file di report Crystal chiamato:<br/><br/> <b>" + Server.MapPath(pdfFile) + "</b>"); } else {//crea il reportReportDocument doc = new ReportDocument();string fileName = Server.MapPath(rptFile);doc.Load(fileName);DataTable dt = DummyTable();dt.TableName = tableName;DataSet ds = new DataSet();dt.TableName = "Table";ds.Tables.Add(dt);doc.SetDataSource(ds);ExportOptions exportOpts = doc.ExportOptions;exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;exportOpts.DestinationOptions = new DiskFileDestinationOptions();// Imposta le opzione del file sul disco.DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();( ( DiskFileDestinationOptions )doc.ExportOptions.DestinationOptions ).DiskFileName = Server.MapPath("fin.pdf");doc.Export();Response.Write(dt.Rows.Count);Response.Write("<a href="" + pdfFile + "">" + pdfFile + "</a>"); } } private void CreateSchemaFile(string fileName, DataSet ds) { string absoluteFileName = HttpContext.Current.Server.MapPath(fileName); FileStream myFileStream = new FileStream (absoluteFileName, FileMode.Create); XmlTextWriter myXmlWriter = new XmlTextWriter(myFileStream, Encoding.Unicode); ds.WriteXml( myXmlWriter,XmlWriteMode.WriteSchema ); myXmlWriter.Close(); } private DataTable GetTheData() { //preleva il DataTable DataTable dt = qs.GetDataTable("SELECT * FROM fin"); DataTable d2 = dt.Copy(); return d2; } private DataTable DummyTable() { //crea la tabella DataTable dt = new DataTable("Employees"); dt.Columns.Add("id" ,Type.GetType("System.Int32")); dt.Columns.Add("FirstName" ,Type.GetType("System.String")); dt.Columns.Add("LastName" ,Type.GetType("System.String")); dt.Columns.Add("HireDate" ,Type.GetType("System.DateTime")); //righe DataRow dr; for(int x=1;x<=10;x++) {dr = dt.NewRow();dr["id"] = x;dr["FirstName"] = "Joe" + x;dr["LastName"] = "Smith" + x;dr["HireDate"] = DateTime.Now;dt.Rows.Add(dr); } return dt; }</script><!--#include file="qs.aspx" -->