如何在PHP應(yīng)用程序中使用FastReport報(bào)表|第3部分
這是關(guān)于結(jié)合使用FastReport.Net和PHP應(yīng)用程序的文章的最后一部分。
在以前的文章(查看第1部分、第2部分)中,我們研究了在ASP.Net Core上創(chuàng)建服務(wù)器部件的方法。讓我提醒您,它使您可以獲取報(bào)表顯示,將報(bào)表加載到其中以進(jìn)行編輯的報(bào)表設(shè)計(jì)器顯示,以給定格式下載報(bào)表。
現(xiàn)在我們必須實(shí)現(xiàn)一個(gè)php應(yīng)用程序。為此,您必須安裝Web服務(wù)器,例如,在其上安裝了Apache和PHP。
在本文中,我們將不重復(fù)贅述創(chuàng)建php應(yīng)用程序的原理。
讓我們確定頁面的結(jié)構(gòu)。我們需要3個(gè)網(wǎng)頁模板:
主頁——顯示網(wǎng)絡(luò)報(bào)表;
設(shè)計(jì)器——顯示報(bào)表設(shè)計(jì)器;
下載——按鈕以下載報(bào)表。
每個(gè)頁面的菜單標(biāo)題都相同。因此,將其放在單獨(dú)的文件header.php中是有意義的。讓我們在預(yù)安裝的Apache目錄的htdocs文件夾中創(chuàng)建它。
<div id="header"> <div > <h1>FastReports</h1> <ul > <li><a href="index.php">Home</a></li> <li ><a href="designer.php">Designer</a></li> <li ><a href="downloads.php">Downloads</a></li> </ul> </div> </div>
同樣,在每個(gè)頁面上,將有一個(gè)包含報(bào)表和操作按鈕的下拉列表。此模塊也移至單獨(dú)的文件——報(bào)表列表:
<?php $info = file_get_contents('https://localhost:44346/api/reports/'); $res = json_decode($info, true); ?> <div id="dropdown"> <select name="reports" id="reports" > <?php foreach ($res as $key => $value) { echo '<option value='.$key.'>'.$value['reportName'].'</option>'; } ?> <input type="button" name="submit" value="Get" onclick=get()'> </div>
這使用內(nèi)容檢索方法以json格式加載報(bào)表列表。該鏈接指向本地調(diào)試iis文件,在該文件中“引發(fā)”了我們的服務(wù)器部分。接下來,使用php代碼,我們使用從服務(wù)器接收到的數(shù)據(jù)填寫下拉列表。獲取“Get”按鈕啟動選定的()函數(shù),該函數(shù)在每個(gè)頁面上都是唯一的。
眾所周知,通常index.php文件用于網(wǎng)站的主頁。讓我們來創(chuàng)建它。
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>FastReports</title> <meta name="title" content="FastReports" /> <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" /> </head> <body> <div id="main"> <?php include ("header.php"); ?> <?php include ("reportslist.php"); ?> <script type="text/javascript" language="javascript"> function get(){ var name = document.getElementById('reports').options[document.getElementById('reports').value].text document.getElementById('forFrame').innerHTML = '<iframe id="frame" src="https://localhost:44346/api/reports/ShowReport?name='+name+'" width="1000" height="1000" />'; }; </script> <div id="forFrame"></div> </div> </body> </html>
該頁面模板包括標(biāo)題和正文。通常,標(biāo)題包括標(biāo)題、元數(shù)據(jù)、樣式鏈接。在頁面的正文中,我們包含了帶有標(biāo)題和下拉列表的文件。請記住,reportslist.php模塊中的獲取“Get”按鈕調(diào)用了Get ()函數(shù)。
讓我們考慮在javascript中實(shí)現(xiàn)此功能。首先,您需要獲取所選報(bào)表的名稱,然后在后端調(diào)用ShowReport方法時(shí)將其作為參數(shù)傳遞。要加載外部對象(WebReport),我們將使用iframe標(biāo)簽。JavaScript再次幫助我們在<div>標(biāo)簽內(nèi)動態(tài)插入ifame。在到源的鏈接中,我們使用了一個(gè)變量——報(bào)表的名稱。
樣式表也是相當(dāng)簡單的stylesite.css:
* { margin: 0; padding: 0; } #main{ background-color:#fff; width: 1000px; margin:0 auto; overflow:hidden; } #header { height:70px; background-color: #FFCC33; text-align: center; } #header li { list-style: none; display: inline; padding: 10px 20px 0px 10px; } #header li a { padding:3px; text-decoration: none; color: #000; } #header li a:hover { text-decoration: none; padding:3px; text-decoration: none; color: red; } #header H1 { font-family: Times, Tahoma, Arial,Verdana, sans-serif; } #dropdown { padding: 5px; }
讓我們啟動我們的Web服務(wù)器并查看索引頁面:
我們有一個(gè)下拉列表和一個(gè)按鈕。選擇報(bào)表并按下按鈕:
結(jié)果,我們得到一個(gè)Web報(bào)表對象。此外,工具欄上的按鈕沒有丟失功能,您可以導(dǎo)出為所需的格式并進(jìn)行打印。
現(xiàn)在,我們實(shí)現(xiàn)Dedigner.php頁面。使用index.php在同一目錄中創(chuàng)建它:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>FastReports</title> <meta name="title" content="FastReports" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" /> </head> <body> <div id="main"> <?php include ("header.php"); ?> <?php include ("reportslist.php"); ?> <script type="text/javascript" language="javascript"> function get(){ var name = document.getElementById('reports').options[document.getElementById('reports').value].text document.getElementById('forFrame').innerHTML = '<iframe id="frame" src="https://localhost:44346/api/reports/Design?name='+name+'" width="1000" height="1000" />'; }; </script> <div id="forFrame"></div> </div> </body> </html>
如您所見,html頁面模板與index.php沒什么不同。唯一的區(qū)別在于Get ()方法。我們從下拉列表中選擇報(bào)表的名稱。然后,在后端插入帶參考設(shè)計(jì)方法的iframe。在參數(shù)中,我們傳遞報(bào)表的名稱。結(jié)果,我們將看到類似于index的頁面:
但是,如果我們單擊Get ()按鈕:
我們得到了一個(gè)帶有已加載報(bào)表模板的設(shè)計(jì)器。我們可以對其進(jìn)行編輯并保存:
綠色框中保存的消息將告訴我們報(bào)表已保存。
仍然需要執(zhí)行第三頁——下載。創(chuàng)建文件downloads.php:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>FastReports</title> <meta name="title" content="FastReports" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <link rel="stylesheet" href="stylesite.css" type="text/css" media="screen, projection" /> </head> <body> <div id="main"> <?php include("header.php"); ?> <?php include("reportslist.php"); ?> <p>Please select report format:</p> <div> <input type="radio" id="pdf" name="r" value="pdf"> <label for="pdf">pdf</label> <input type="radio" id="html" name="r" value="html"> <label for="html">html</label> </div> <script type="text/javascript" language="javascript"> function get(){ var number = document.getElementById('reports').value; number++ var type = ''; if (number > 0) { var inp = document.getElementsByName('r'); for (var i = 0; i < inp.length; i++) { if (inp[i].type == "radio" && inp[i].checked) { type = inp[i].value; } } var elem = document.createElement('a'); elem.setAttribute('href','https://localhost:44346/api/reports/'+number+'?format='+type); elem.setAttribute('download', 'download'); elem.click(); } } </script> </div> </body> </html>
除下拉列表外,頁面模板還包含兩個(gè)單選按鈕:pdf、html。這是我們在后端實(shí)現(xiàn)的兩種導(dǎo)出類型。這次的Get ()方法有很大的不同。我們將使用下拉列表中選擇的報(bào)表的索引代替名稱。在腳本中,我們創(chuàng)建<a>標(biāo)記并將鏈接設(shè)置為后端,在此處使用WebApi以指定的格式獲取索引報(bào)表。形成鏈接后,我們立即以編程方式單擊它。因此,我們下載了文件。運(yùn)作方式如下:
單擊獲取按鈕。然后我們得到文件:
您可以像在第一頁上那樣在WebReport對象中顯示報(bào)表,然后進(jìn)行導(dǎo)出。下載“Downloads”頁面顯示了一種直接從服務(wù)器獲取報(bào)表導(dǎo)出的替代方法。
本文總結(jié)了由PHP應(yīng)用程序處理FastReport.Net報(bào)表的三個(gè)部分。
產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動 | 在線客服