示例#1
0
        public static string Transform( string xmlPath, XsltArgumentList argList )
        {
            string html = null;

            try
            {
                string transformFile = RulesEngineUtils.GetResourcePath( RulesEngineUtils.ReportBuilderFolder.Resources, "InstanceReport.xslt" );

                XslCompiledTransform transform = new XslCompiledTransform();
                transform.Load( transformFile );

                using( MemoryStream ms = new MemoryStream() )
                {
                    XmlWriterSettings xSettings = new XmlWriterSettings();
                    xSettings.ConformanceLevel = ConformanceLevel.Fragment;
                    xSettings.Encoding = Encoding.ASCII;
                    xSettings.Indent = true;
                    xSettings.OmitXmlDeclaration = true;

                    //we REALLY need to set this to HTML
                    xSettings.GetType().GetProperty( "OutputMethod" ).SetValue( xSettings, XmlOutputMethod.Html, null );

                    using( XmlWriter xWriter = XmlWriter.Create( ms, xSettings ) )
                    {
                        transform.Transform( xmlPath, argList, xWriter );
                    }

                    ms.Flush();
                    html = Encoding.ASCII.GetString( ms.ToArray() );
                }
            }
            catch( Exception ex )
            {
                html = "<h2>Error <small>generating preview</small></h2>"+
                    "<pre>"+ ex.Message +"</pre>";
            }

            return html;
        }
示例#2
0
        /// <summary>
        /// Generates HTML report files if allowed by this.<see cref="ReportFormat"/> and as specified by this.<see cref="HtmlReportFormat"/>.
        /// </summary>
        /// <returns>True on success, false on fail.</returns>
        private bool GenerateHtmlFiles()
        {
            // Use custom XSLT if provided
            string transformFile = String.Empty;
            if (!String.IsNullOrEmpty(this.xsltStylesheetPath))
            {
                //executor.Invoke(this.xsltStylesheetPath);
                transformFile = this.xsltStylesheetPath;
            }
            else
            {
                transformFile = RulesEngineUtils.GetResourcePath( RulesEngineUtils.ReportBuilderFolder.Resources, RulesEngineUtils.TransformFile );
                //executor.Invoke(transformFile);
            }

            if( !File.Exists( transformFile ) )
            {
                executor.Invoke("Conversion aborted");
                Trace.TraceError( "Error: Transform File not found at:\n\t" + transformFile + "\nHtml Conversion aborted." );
                return false;
            }

            bool anyFiles = false;

            //load the transform once for all R-files
            XslCompiledTransform transform = new XslCompiledTransform();
            try
            {
                transform.Load(transformFile);
            }
            catch ( XmlException )
            {
                Trace.TraceError("Error: Transform File contains invalid XML:\n\t" + transformFile + "\nHtml Conversion aborted.");
                return false;
            }
            catch ( XsltException )
            {
                Trace.TraceError("Error: Transform File contains invalid XSLT:\n\t" + transformFile + "\nHtml Conversion aborted.");
                return false;
            }

            XsltArgumentList argList = new XsltArgumentList();
            argList.Clear();

            if( this.HtmlReportFormat == HtmlReportFormat.Complete )
            {
                argList.AddParam( "asPage", string.Empty, "true" );

            }

            argList.AddParam( "numberDecimalSeparator", string.Empty, Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator );
            argList.AddParam( "numberGroupSeparator", string.Empty, Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator );
            argList.AddParam( "numberGroupSize", string.Empty, Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSizes[ 0 ].ToString() );

            XmlWriterSettings writerSettings = new XmlWriterSettings();
            writerSettings.Encoding = InstanceReport.Encoding;
            writerSettings.Indent = true;
            writerSettings.OmitXmlDeclaration = true;

            //set intelligent HTML output
            writerSettings.GetType().GetProperty( "OutputMethod" ).SetValue( writerSettings, XmlOutputMethod.Html, null );

            foreach( ReportHeader header in this.currentFilingSummary.MyReports )
            {
                switch( header.ReportType )
                {
                    case ReportHeaderType.Notes:
                    case ReportHeaderType.Sheet:
                        break;
                    default:
                        continue;
                }

                string inFile = Path.Combine( this.currentReportDirectory, header.XmlFileName );
                if( !File.Exists( inFile ) )
                {
                    Trace.TraceWarning( "Warning: The FilingSummary provided '"+ header.XmlFileName +"' but the file was not found." +
                        separator +"\tReport skipped: "+ header.LongName );
                    continue;
                }

                int extLen = Path.GetExtension( header.XmlFileName ).Length;
                string outFile = inFile.Substring( 0, inFile.Length - extLen ) +".htm";

                using( XmlReader xReader = XmlReader.Create( inFile ) )
                {
                    using( FileStream msOut = new FileStream( outFile, FileMode.Create, FileAccess.Write ) )
                    {
                        try
                        {
                            using( RivetXmlWriter xWriter = new RivetXmlWriter( msOut, writerSettings ) )
                            {
                                transform.Transform( xReader, argList, xWriter );
                            }

                            anyFiles = true;
                            header.HtmlFileName = Path.GetFileName( outFile );
                        }
                        catch( Exception ex )
                        {
                            Trace.TraceWarning( "Warning: An error occurred while converting '" + header.XmlFileName + "' to HTML." +
                                separator + "\tError: " + ex.Message +
                                separator + "\tReport skipped: " + header.LongName );
                        }
                    }
                }
            }

            if( !anyFiles )
                return true;

            string styleSheetTo = Path.Combine( this.currentReportDirectory, RulesEngineUtils.StylesheetFile );
            string stylesheetFrom = RulesEngineUtils.GetResourcePath( RulesEngineUtils.ReportBuilderFolder.Resources, RulesEngineUtils.StylesheetFile );
            FileUtilities.Copy( stylesheetFrom, styleSheetTo );

            string javascriptTo = Path.Combine( this.currentReportDirectory, RulesEngineUtils.JavascriptFile );
            string javascriptFrom = RulesEngineUtils.GetResourcePath( RulesEngineUtils.ReportBuilderFolder.Resources, RulesEngineUtils.JavascriptFile );
            FileUtilities.Copy( javascriptFrom, javascriptTo );
            return true;
        }