• <menu id="w2i4a"></menu>
  • logo FastReport.Net教程2019

    文檔首頁>>FastReport.Net教程2019>>如何在PHP應用程序中使用FastReport報表|第1部分

    如何在PHP應用程序中使用FastReport報表|第1部分


    FastReport.Net是專門為.net平臺創(chuàng)建的。因此,Web報表可以使用ASP.Net和ASP.Net Core技術。

    但是,萬維網(wǎng)上的大多數(shù)網(wǎng)站仍然是用PHP編寫的。許多人希望在其php應用程序中顯示FastReport報表。如您所知,這可以歸功于http協(xié)議。我們將只使用PHP應用程序作為客戶端,使用ASP.Net Core作為服務器。

    我們將提供兩種php和html格式之一的報表輸出,報表設計器輸出和報表下載(作為演示,兩種格式就足夠了)。

    因此,在php應用程序中將有三個頁面:顯示報表、顯示報表設計器、下載報表。

    讓我們繼續(xù)服務器端的實現(xiàn)。最合適的技術選擇是ASP.Net Core,因為它是跨平臺的,這意味著該應用程序也可以在Linux服務器上運行。據(jù)統(tǒng)計,Linux服務器是用于托管網(wǎng)站的最受歡迎的解決方案。

    首先,我們需要從開發(fā)人員的站點下載報表設計器(下載FastReport Online Designer試用版、下載FastReport.Net試用版)。要下載它,必須首先在特殊的配置器中進行組裝。請注意設計器將在您的項目中使用的一種選擇。

    如何在PHP應用程序中使用FastReport報表|第1部分

    您需要選擇FastReport.Web for Core。

    因此,讓我們創(chuàng)建一個ASP.Net Core應用程序。要在其中使用FastReport Web報表,您需要在NuGet管理器中安裝軟件包。這些程序包位于Nuget文件夾中的FastReport.Net安裝目錄中(小編已經(jīng)為您整理了安裝包,點擊這里下載)。因此,您將必須在NuGet程序包管理器中配置本地程序包源。

    如此一來,您應該安裝以下軟件包:FastReport.Core和FastReport.Web(點擊下載FastReport.Core,點擊下載FastReport.Web)。

    如何在PHP應用程序中使用FastReport報表|第1部分

    要在項目中使用庫,請將它們包含在Startup.cs文件中:

     public void Configure(IApplicationBuilder app, IHostingEnvironment env)
     {
     …
     app.UseFastReport();
     …
     }

    要在項目中使用庫,請將它們包含在Startup.cs文件中:

    using FastReport.Web;
    using System.IO;
    using FastReport;
    using FastReport.Export.Html;
    using FastReport.Export.Pdf;
    using SimpleReportViewer.Models;
    using System.Data;
    using FastReport.Utils;
     
    namespace SimpleReportViewer.Controllers
    {
     [Route("api/[controller]")]
     public class ReportsController : Controller
     {
     private IHostingEnvironment _env;
     
    // Web application directory path
     public string webRoot
     {
     get { return _env.WebRootPath; }
     set { }
     }
     
     public ReportsController(IHostingEnvironment env)
     {
     _env = env;
     }
     
     // Show report by name
     [HttpGet("[action]")]
     public IActionResult ShowReport(string name)
     {
     if (name == null) name = "Master-Detail.frx";
     WebReport WebReport = new WebReport();
     WebReport.Width = "1000";
     WebReport.Height = "1000";
     WebReport.Report.Load(String.Format("{0}/App_Data/{1}", webRoot, name)); // Download the report to the WebReport object
     System.Data.DataSet dataSet = new System.Data.DataSet(); // Download the report to the WebReport object
     dataSet.ReadXml(String.Format("{0}/App_Data/nwind.xml", webRoot)); // Open the xml database
     WebReport.Report.RegisterData(dataSet, "NorthWind"); // Register the data source in the report
     ViewBag.WebReport = WebReport; // Pass the report to View
    return View();
     }
    }

    首先,我們獲得了wwwroot應用程序文件夾的路徑。然后,我們實現(xiàn)了一種獲取報表的方法。如果未傳遞報表名稱,則此方法應獲取報表的名稱。對于此Web方法,您需要創(chuàng)建一個視圖。為此,請右鍵單擊該方法的簽名,然后從下拉菜單中選擇添加視圖“Add view ...”。接下來,只需單擊確定。

    在創(chuàng)建的應用程序中,將代碼替換為:

    @await ViewBag.WebReport.Render()

    我們具有報表的鏈接,但我們仍未將報表本身添加到項目中。創(chuàng)建一個App_Data文件夾并為其添加報表和數(shù)據(jù)庫:

    如何在PHP應用程序中使用FastReport報表|第1部分

    另外,在wwwroot中,我們將文件夾放置在報表設計器中:

    如何在PHP應用程序中使用FastReport報表|第1部分

    現(xiàn)在,我們可以將報表設計器顯示方法添加到我們的ReportsController中:

    // Static variable for storing the report name
     public static string ReportName;
    // We show the designer with a report
     
     [HttpGet("[action]")]
     public IActionResult Design(string name)
     {
     if (name == null) name = "Master-Detail.frx";
     var webRoot = _env.WebRootPath;
     WebReport WebReport = new WebReport();
     WebReport.Width = "1000";
     WebReport.Height = "1000";
     WebReport.Report.Load(System.IO.Path.Combine(webRoot, (String.Format("App_Data/{0}", name)))); // Download the report to the WebReport object
     System.Data.DataSet dataSet = new System.Data.DataSet(); // Create a data source
     dataSet.ReadXml(System.IO.Path.Combine(webRoot, "App_Data/nwind.xml")); // Open the xml database
     WebReport.Report.RegisterData(dataSet, "NorthWind"); // Register the data source in the report
    ReportName = name;
     WebReport.Mode = WebReportMode.Designer; // Set the mode of the object web report - display designer
     WebReport.DesignerLocale = "en";
     WebReport.DesignerPath = "/WebReportDesigner/index.html"; // Set the URL of the online designer
    WebReport.DesignerSaveCallBack = "api/reports/SaveDesignedReport"; // Set the view URL for the report save method
     WebReport.Debug = true;
     ViewBag.WebReport = WebReport; // Pass the report to View
     return View();
     }

    此方法還接收報表名稱作為參數(shù)。為了顯示設計器,使用了WebReport對象。這里的重點是為報表保存事件的設計器和處理程序設置正確的路徑。

    使用簡單的代碼為此方法創(chuàng)建視圖:

    @{
     ViewData["Title"] = "Design";
    }
     
    @await ViewBag.WebReport.Render()

    向控制器添加另一個方法,以處理在設計器中編輯的報表的保存事件:

     // call-back for save the designed report
     [HttpPost("[action]")]
     public IActionResult SaveDesignedReport(string reportID, string reportUUID)
     {
     var webRoot = _env.WebRootPath;
     ViewBag.Message = String.Format("Confirmed {0} {1}", reportID, reportUUID); // We set the message for presentation
     
     Stream reportForSave = Request.Body; // We write the result of the Post request to the stream
     string pathToSave = System.IO.Path.Combine(webRoot, @"App_Data/"+ ReportName); // We get the path to save the file
     using (FileStream file = new FileStream(pathToSave, FileMode.Create)) // Create a file stream
     {
     reportForSave.CopyTo(file); // Save the result of the request to a file
     }
     return View();
     }

    請注意,由于我們在設計器中打開報表名稱時會保存該報表,因此我們將報表以相同的名稱保存到App_Data文件夾中。因此,原始報表將被編輯的報表替換。

    根據(jù)需要,如果執(zhí)行此方法沒有錯誤,您將在設計器中保存該描述。

    讓我們結束本文的第1部分。在第2部分中,我們將考慮一種通過url獲取報表導出的方法。

    點擊查看第2部分。

    點擊查看第3部分。



    產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動 | 在線客服

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();