当前位置: 首页 > article >正文

PHP:将数据传递给Grid++Report模板进行打印

模板参考

这里使用的模板test111.grt参照进行生成 ,需要确保字段对应才能将数据进行传递

Grid++Report:自定义模板设计(自由表格使用),详细教程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_46001736/article/details/144315191?spm=1001.2014.3001.5502

PHP引入Grid++Report参考 

php:完整部署Grid++Report到php项目,并实现模板打印-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_46001736/article/details/144309295?spm=1001.2014.3001.5502

一、官方提供模板

可参考plugins中的案例

1、将模板写入index.php

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>Web报表(B/S报表)演示 - 查询显示控件展现报表</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="php/plugins/CreateControl.js" type="text/javascript"></script>
    <style type="text/css">
        html,
        body {
            margin: 0;
            height: 100%;
        }
    </style>
</head>

<body style="margin:0">
    <script type="text/javascript">
        //用查询显示控件展现报表,从URL“../grf/1a.grf”获取报表膜板定义,从URL“../data/DataCenter.php?data=Customer”获取XML形式的报表数据,
        //CreateDisplayViewerEx("100%", "100%", urlAddRandomNo("../../grf/1a.grf"), "../../data/DataCenter.php?data=Customer", true, "");
        InsertDisplayViewer({
            report: urlAddRandomNo("php/grf/test111.grf"),
            data: "php/data/DataCenter.php?data=Customer"
        });
    </script>
</body>

</html>

2、数据库查询、数据传递

代码路径:php/data/DataCenter.php

文件DataCenter.php:使用Switch case进行判断,并查询数据传递给模板

数据查询,这里传递的参数是data = Customer,也就是case=Customer的时候执行查询语句

这是在DataCenter.php进行数据查询这里查询的数据都是xml类型,在sql中进行了转换

mysql_GenXmlData.php代码

<?php
include 'BaseReportData.php';


// 产生报表的多个记录集的 XML 数据
function XML_GenMultiRecordset($QueryList, $DataType = const_DefaultDataType)
{
	// 连接到 MySQL 服务器
	$conn = new mysqli("localhost", "root", "", "gridreport");
	if ($conn->connect_error) {
		die("连接失败: " . $conn->connect_error);
	}
	$conn->set_charset("utf8");

	$XMLText = "<xml>\n";
	foreach ($QueryList as $RecordsetName => $QuerySQL) {
		$result = $conn->query($QuerySQL);

		$fldTypes = array();
		$numfields = $result->field_count;
		for ($i = 0; $i < $numfields; $i++) {
			$fldType = $result->fetch_field_direct($i)->type;
			if (stripos($fldType, "date") !== false)
				$fldTypes[$i] = 1;
			else if ($fldType == "blob" || $fldType == "image")
				$fldTypes[$i] = 2;
			else
				$fldTypes[$i] = 0;
		}

		while ($row = $result->fetch_assoc()) {
			$XMLText .= "<" . $RecordsetName . ">";
			for ($i = 0; $i < $numfields; $i++) {
				if ($fldTypes[$i] == 2)
					$XMLText .= ("<" . $result->fetch_field_direct($i)->name . ">" . base64_encode($row[$result->fetch_field_direct($i)->name]) . "</" . $result->fetch_field_direct($i)->name . ">");
				else
					$XMLText .= ("<" . $result->fetch_field_direct($i)->name . ">" . htmlspecialchars($row[$result->fetch_field_direct($i)->name], ENT_QUOTES) . "</" . $result->fetch_field_direct($i)->name . ">");
			}
			$XMLText .= "</" . $RecordsetName . ">\n";
		}

		$result->free();
	}
	$XMLText .= "</xml>\n";

	ResponseReportData($XMLText, $DataType);

	$conn->close();
}

// 产生报表的一个记录集的 XML 数据
function XML_GenOneRecordset($QuerySQL, $DataType = const_DefaultDataType)
{
	$QueryList = array("row" => $QuerySQL);
	XML_GenMultiRecordset($QueryList, $DataType);
}

function BatchGetDataCount($QuerySQL)
{
	// 连接到 MySQL 服务器
	$conn = new mysqli("localhost", "root", "", "gridreport");
	if ($conn->connect_error) {
		die("连接失败: " . $conn->connect_error);
	}
	$conn->set_charset("utf8");

	$result = $conn->query($QuerySQL);

	$Total = 0;
	if ($row = $result->fetch_assoc()) {
		$Total = $row[0];
	}

	$result->free();

	$conn->close();

	return $Total;
}

// 产生字段类型,用于调试中分析子段的类型名称
function ListFieldType($QuerySQL)
{
	header("Content-Type: text/plain");

	// 连接到 MySQL 服务器
	$conn = new mysqli("localhost", "root", "", "gridreport");
	if ($conn->connect_error) {
		die("连接失败: " . $conn->connect_error);
	}
	$conn->set_charset("utf8");

	$result = $conn->query($QuerySQL);

	$XMLText = "<xml>\n";

	$numfields = $result->field_count;
	for ($i = 0; $i < $numfields; $i++) {
		$field = $result->fetch_field_direct($i);
		$XMLText .= ($field->name . "=" . $field->type . "\n");
	}

	$result->free();

	$conn->close();

	$XMLText .= "</xml>\n";
	echo $XMLText;
}

二、自定义数据传递

这里采用json格式进行传递

1、index.php

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>Web报表(B/S报表)演示 - 查询显示控件展现报表</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="php/plugins/CreateControl.js" type="text/javascript"></script>
    <style type="text/css">
        html,
        body {
            margin: 0;
            height: 100%;
        }
    </style>
</head>

<body style="margin:0">
    <script type="text/javascript">
        //用查询显示控件展现报表,从URL“../grf/1a.grf”获取报表膜板定义,从URL“../data/DataCenter.php?data=Customer”获取XML形式的报表数据,
        //CreateDisplayViewerEx("100%", "100%", urlAddRandomNo("../../grf/1a.grf"), "../../data/DataCenter.php?data=Customer", true, "");
        var data = {
            "Master": [{
                "Barcode1": '1234567890', //条形码名称
                "header1": '123456',
                "header2": "客户",
                "header3": "零件料号",
                "header4": "2024-07-01",
                "header5": "零件名称",
                "header6": "班别",
            }],
            "Detail": [{
                    "line1": "HUNGC",
                    "line2": "五金机械",
                    "line3": "苏先生",
                    "line4": "销售代表",
                    "line5": "德昌路甲"
                },
                {
                    "line1": "CENTC",
                    "line2": "三捷实业",
                    "line3": "王先生",
                    "line4": "市场经理",
                    "line5": "英雄山路"
                },
                {
                    "line1": "CACTU",
                    "line2": "威航货运",
                    "line3": "刘先生",
                    "line4": "销售代理",
                    "line5": "经七纬"
                },
                {
                    "line1": "BLONP",
                    "line2": "国皓",
                    "line3": "黄雅玲",
                    "line4": "市场经理",
                    "line5": "广发北路"
                },
            ],

        }
        //  将数据转换为 JSON 格式
        var jsonData = JSON.stringify(data);
        InsertDisplayViewer({
            report: urlAddRandomNo("php/grf/test111.grf"),
            data: jsonData,
            //  data: "php/data/DataCenter.php?data=Customer"
        });
    </script>
</body>

</html>

确认数据对应

2、效果


http://www.kler.cn/a/430114.html

相关文章:

  • H2数据库在单元测试中的应用
  • .NET体系架构
  • springboot+vue使用easyExcel实现导出功能
  • docker 基本使用
  • 【Unity功能集】TextureShop纹理工坊(十二)画笔工具、橡皮擦工具
  • 30天开发操作系统 第 12 天 -- 定时器 v1.0
  • 棋牌项目Go的日志打印问题
  • workflow笔记
  • WebSocket 经验与最佳实践
  • 《跨越平台壁垒:C++ 人工智能模型在移动设备的部署之路》
  • java+ssm+mysql校园物品租赁网
  • C#请求https提示未能为 SSL/TLS 安全通道建立信任关系
  • XREAL在日本AR市场成功的策略分析
  • Mysql | 尚硅谷 | 第02章_MySQL环境搭建
  • linux 安装 vsftpd 服务以及配置全攻略,vsftpd 虚拟多用户多目录配置,为每个用户配置不同的使用权限
  • 【前端】深度解析 JavaScript 中的 new 关键字与构造函数
  • 【ETCD】【源码阅读】configurePeerListeners() 函数解析
  • 数据结构——哈夫曼树
  • 【电控笔记z46】非线性磁链笔记
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • AI智能体Prompt预设词指令大全+GPTs应用使用
  • Vue了解
  • 使用PXE+Kickstart无人值守安装Linux操作系统
  • 正则表达式去除文本中括号()<>[]里的内容
  • BurpSuite-8(FakeIP与爬虫审计)
  • 工业—使用Flink处理Kafka中的数据_EnvironmentData1