最近要用TPageProducer替换模版,同时还须实现html分页,所见即所得,网上找了半天没发现,于是自己琢磨写了一个。代码用delphi6写,
由于实际需要,所以写例子的时候缩小了实际模型,供大家分享。这里写的例子表格,如果一整行的话肯定很容易控制
TDContent=class
TDtxt : String;
Htmltxt : String;
Height : Integer;
NextHeight : Integer;
constructor Create(aTDtxt : String);
end;
HtmlContent=class
Content : String;
Height : Integer;
TDList : TList;
constructor Create(aContent : String);
end;
PageHeight : Integer;
HeadHeight : Integer;
RestHeight : Integer;
clsHtmlContent : HtmlContent;
PageNo : Integer;
procedure MakeContent; //假设内容
function CaluHeight(height,NextHeight : Integer) : Integer; //计算页面高度
function NeedChangePage(height,NextHeight : Integer) :Boolean; //是否要分页
procedure SplitPage(allHtml : String); //分离页面
procedure MakeHtmlCode;//形成html
====实现代码
function TForm1.NeedChangePage(height,NextHeight : Integer) :Boolean; //是否要分页
begin
Result := False;
if RestHeight-height-NextHeight <= 0 then Result := True;
end;
procedure TForm1.SplitPage(allHtml : String);
var
tmppageNo : Integer;
lsSave : TStringList;
sPos,ePos : Integer;
s : String;
begin
lsSave := TStringList.Create;
tmpPageNo := 0;
sPos := 0;
while allHtml <> '' do
begin
tmpPageNo := tmpPageNo + 1;
ePos := pos('</BODY>',uppercase(allHtml));
if ePos > 0 then
begin
lsSave.Text := copy(allHtml,sPos,ePos + 6);
allHtml := copy(allHtml,ePos+7,length(allHtml));
s := 'e:/test/resulttest' + IntToStr(tmpPageNo) + '.html';
if fileExists(s) then deleteFIle(s);
try
lsSave.SaveToFile(S);
except
end;
end
else allHtml := '';
end;
end;
procedure TForm1.MakeHtmlCode;
var
i,j : Integer;
clsTDContent,clsTDContent1 : TDContent;
tmp1,tmp2,tmp3 : String;
bIsChange : Boolean;
sPos,ePos : Integer;
begin
tmp3 :='';
sPos := 0;
ePos := 0;
for i := 0 to clsHtmlContent.TDList.Count - 1 do
begin
bIsChange := False;
clsTDContent := clsHtmlContent.TDList[i];
clsTDContent.Htmltxt := '<td height="21" width="25%" colspan="3">' + clsTDContent.TDtxt + '</td>';
bIsChange := NeedChangePage(clsTDContent.Height,clsTDContent.NextHeight);
clsTDContent.Height := CaluHeight(clsTDContent.Height,clsTDContent.NextHeight);
if bIsChange or (i=clsHtmlContent.TDList.Count - 1) then //如果下一页要换页
begin
ePos := i;
tmp1 := '<tr>';
tmp1 := tmp1 + '<td height=' + IntToStr(42 * (ePos+1)) + ' rowspan=' + IntToStr(ePos-sPos+1) + '>母格</td>';
for j := sPos to ePos do
begin
clsTDContent1 := clsHtmlContent.TDList[j];
if j = sPos then //第一个单元格,则与母格在同一个<tr>中
begin
tmp1 := tmp1 + clsTDContent1.Htmltxt;
end
else
begin
tmp1 := tmp1 + '</tr><tr>' + clsTDContent1.Htmltxt;
end;
if j = ePos then tmp1 := tmp1 + '</tr>';
end;
if bIsChange then //防止i=clsHtmlContent.TDList.Count - 1条件成立时,未满足分页
begin
tmp2 := '</table></body><head><title>测试</title></head>' +
'<body>' +
'<table border="1" cellpadding="0" cellspacing="0" width="650" height="650">';
end
else tmp2 := '';
tmp3 := tmp3 + tmp1;
if tmp2 <> '' then tmp3 := tmp3 + tmp2;
sPos := ePos + 1; //变更起点为当前位置的后一个
end;
end;
clsHtmlContent.Content := tmp3;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ls : TStringList;
s : String;
begin
ls := TStringList.Create;
PageProducer2.HTMLFile := 'D:/result.html';
MakeContent;//读取内容
MakeHtmlCode;//形成html
ls.Text := PageProducer2.Content;
SplitPage(ls.Text);
{
s := 'e:/test/resulttest.html';
if fileExists(s) then deleteFIle(s);
try
ls.SaveToFile(S);
except
end;
}
end;
procedure TForm1.MakeContent;
var
clsTDContent : TDContent;
i : Integer;
s : String;
begin
PageNo := 1;
clsHtmlContent := HtmlContent.Create('');
for i := 0 to 5 do
begin
s := 's' + IntToStr(i+1);
clsTDContent := TDContent.Create(s);
clsHtmlContent.TDList.Add(clsTDContent);
end;
end;
function TForm1.CaluHeight(height,NextHeight : Integer) : Integer;
var
tryRestHeight : Integer;
begin
tryRestHeight := RestHeight - height;
//如果容的下当前高度
if tryRestHeight >=0 then
begin
if (tryRestHeight - NextHeight) >= 0 then //如果容不下下一次的高度,则这次全部取完高度
begin
RestHeight := tryRestHeight;
Result := height;
end
else
begin
Result := RestHeight+50;//要换时,为了抵消掉页面设置小判断时提前分页,而分页时高度需要多设
RestHeight :=PageHeight;
end;
end
else Result := tryRestHeight; //否则返回小于0的数
end;
分享到:
相关推荐
为了改善这种情况,"一个对html表格分页的类" 提供了解决方案。这个类允许我们将已有的HTML表格转换为具有分页和查询功能的交互式表格,完全使用JavaScript实现,不依赖任何后台技术,也不使用AJAX。 首先,我们...
"一个对HTML表格分页的类(1.2版)"正是为解决这个问题而设计的。这个类库专注于JavaScript技术,用于实现网页中的表格分页功能,提升用户体验,避免一次性加载过多数据导致页面响应速度变慢。 分页是一种常见的数据...
表格分页HTML 表格分页(jQuery 插件)依赖关系<!-- jquery --> [removed] [removed]用法[removed] $(document).ready(function(){ $('#table-div-id').tablePaginate({navigateType:'full',recordPerPage:2})...
html前端获取后端js的数据,实现到html表格,并且实现表格分页显示,分页显示原理是要显示那一页数据就从后端获取需要显示页的数据,不会一次性获取全部数据,减小流前端的压力。后端使用js+express,读取csv文件...
jQuery作为一个广泛使用的JavaScript库,提供了丰富的插件来帮助开发者实现各种功能,包括表格分页。本篇文章将深入探讨jQuery插件在实现表格分页中的应用及其相关知识点。 一、jQuery和表格分页基础 1. jQuery...
本教程将详细讲解如何使用jQuery库来实现表格的动态分页,同时结合Java后端进行数据的动态查询和分页处理。 首先,让我们了解动态分页的基本原理。动态分页是指在用户滚动或点击分页按钮时,仅加载当前显示的数据,...
"jquery打印HTML表格自动分页"这个主题是关于如何利用jQuery来实现在用户打印HTML表格时自动进行分页的功能,这样可以确保长表格在打印时不被裁剪,而是以多页的形式呈现。 首先,要实现这一功能,我们需要理解HTML...
使用纯JavaScript实现表格分页显示,提供页面跳转功能,包括首页、上一页、下一页、尾页等功能。
4. 实现表格分页功能,可指定是否开启分页功能及每页行数; 5. 排序数据支持数据类型自动识别(这点很强大)。例如:整型数据、浮点型数据、字母、电话号码、日期、链接 6. 表格外观样式可通过CSS灵活定制 7. 所需要...
了解以上知识点后,你可以构建一个高效、响应式的动态数据表格分页系统。通过jQuery与PHP、AJAX的配合,实现数据的动态加载,既保证了用户体验,又优化了服务器性能。在实际应用中,还需要考虑错误处理、安全性以及...
在网页开发中,数据展示是不可或缺的一部分,尤其是当数据量较大时,动态表格数据分页检索排序就显得尤为重要。这个项目“jQuery动态表格数据分页检索排序代码”提供了一个纯前端实现的解决方案,无需服务器端的支持...
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here <script type="text/javascript" src="js/jquery-1.11.0.min.js" ></script> ...
本资源提供了一个基于纯JavaScript实现的表格分页代码,它适用于静态数据的展示,主要功能是通过分页来控制表格中数据行的显示与隐藏,从而提高用户浏览效率和页面性能。 首先,我们来看“tabel纯分页效果.html”这...
表格分页的基本思想是将大量数据分成多个部分,每次只加载一部分(即一页)到页面上,用户可以通过翻页操作查看其他部分。这既减少了内存占用,又提高了页面响应速度。 2. **JavaScript基础** JavaScript是实现...
"支持页码跳转的jQuery动态数据表格分页插件.zip" 提供了一个解决方案,它使用户能够轻松地浏览和操作大量数据,而无需一次性加载所有内容,从而优化了页面加载速度。 首先,jQuery是一个轻量级的JavaScript库,它...
在本项目中,"jquery动态表格自定义分页.zip"是一个包含使用jQuery和CSS实现动态表格分页功能的示例。下面将详细讲解这个项目的关键知识点: 1. jQuery:jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历...
### Axure中继器表格分页教程知识点解析 #### 一、中继器表格分页概述 在Axure RP的设计过程中,中继器是用于处理动态数据的重要组件之一。通过中继器,我们可以轻松地创建出可以动态加载数据的列表、表格等。而在...
jQuery表格分页排序插件,如“SlimTable”,在网页开发中扮演着重要角色,尤其在处理大量数据展示时。这种插件能够有效地提升用户体验,因为它允许用户仅查看和操作他们关心的部分数据,而不是一次性加载所有信息。...
总的来说,解决网页表格分页问题需要对HTML和CSS有深入的理解,同时要结合实际的打印环境进行调试。不断试验和调整参数是找到最佳解决方案的关键。通过这种方式,我们可以实现网页报表表格的自动分页打印,确保内容...
### Axure中继器表格分页与动态页码生成教程 #### 一、引言 在Axure RP这款强大的原型设计工具中,中继器是一个非常实用的功能,它可以帮助我们快速构建具有动态数据展示能力的原型。特别是对于需要展示大量数据的...