Foxtable(狐表)用户栏目专家坐堂 → [求助]报表关于表格上下居中的问题?


  共有2170人关注过本帖树形打印复制链接

主题:[求助]报表关于表格上下居中的问题?

帅哥哟,离线,有人找我吗?
2425004926
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
[求助]报表关于表格上下居中的问题?  发帖心情 Post By:2020/10/23 16:04:00 [只看该作者]

我想要的结果是:表格第一行行高是由方程式算出的一个固定值,第二行根据文字多少自动确定行高,然后整个表上下居中,试了多次,都不成功,蓝色处总有问题,望老师指点一下,谢谢!

 '定义报表
Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.PaperKind = 9 '纸张类型改为A4
doc.PageSetting.Landscape = True '横向打印
Doc.PageSetting.LeftMargin = 25 '设置左边距
Doc.PageSetting.RightMargin = 20 '设置右边距
'Doc.PageSetting.TopMargin = 20 '设置上边距
'Doc.PageSetting.BottomMargin = 20 '设置下边距

Dim rt As New prt.RenderTable() '定义一个表格对象
Dim rx As New prt.RenderText '创建一个文本
Dim rx2 As New prt.RenderText '创建一个文本
'表格
rt = New prt.RenderTable() '定义一个表格对象
rt.Style.GridLines.All = New prt.Linedef(Color.red) '将表格的颜色设为无色,red,
rt.Width = 100
'rt.height = 170
rt.rows(0).Height = 50    '第二行高度
rt.rows(1).Height = "auto"    '第二行高度

doc.Body.Children.Add(rt) '将表格对象加入到报表中
'添加容器
Dim rk As prt.RenderArea
rk = rt.Cells(1,0).Area '第2行第1列引用单元格的容器
rx = New prt.RenderText '创建一个文本
rx2 = New prt.RenderText '再创建一个文本
rk.Stacking = prt.StackingRulesEnum.BlockTopToBottom '排列方式改为从左到右
'题名
rx.Text = "增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew方法" '设置文本对象的内容
rx.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx.Style.LineSpacing = 120 '1.3倍行距
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rx.Style.Spacing.Top = 3 '距离右边的对象2毫米
rx.Style.Spacing.Bottom = 3 '距离右边的对象2毫米
'档案号
rx2.Text =  "增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew方法增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew" '设置文本对象的内容
rx2.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx2.Style.LineSpacing = 120 '1.3倍行距
rx2.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx2.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rk.Children.Add(rx)
rk.Children.Add(rx2)
MessageBox.Show(rt.height)
'rt.height = rt.rows(0).Height + rt.rows(1).Height


Dim s As Integer
's = CInt((210 - rt.Height)/2)
'Doc.PageSetting.TopMargin = rt.height '设置上边距

Doc.Preview() '预览报表

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/23 16:28:00 [只看该作者]

只能算个大概

Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.PaperKind = 9 '纸张类型改为A4
doc.PageSetting.Landscape = True '横向打印
Doc.PageSetting.LeftMargin = 25 '设置左边距
Doc.PageSetting.RightMargin = 20 '设置右边距
Doc.PageSetting.TopMargin = 0 '设置上边距
Doc.PageSetting.BottomMargin = 0 '设置下边距
Dim rt As New prt.RenderTable() '定义一个表格对象
Dim rx As New prt.RenderText '创建一个文本
Dim rx2 As New prt.RenderText '创建一个文本
'表格
rt = New prt.RenderTable() '定义一个表格对象
rt.Style.GridLines.All = New prt.Linedef(Color.red) '将表格的颜色设为无色,red,
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.Width = 100
'rt.height = 170
rt.rows(0).Height = 50    '第二行高度
'rt.rows(1).Height = "auto"    '第二行高度
doc.Body.Children.Add(rt) '将表格对象加入到报表中
'添加容器
Dim rk As prt.RenderArea
rk = rt.Cells(1,0).Area '第2行第1列引用单元格的容器
rx = New prt.RenderText '创建一个文本
rx2 = New prt.RenderText '再创建一个文本
rk.Stacking = prt.StackingRulesEnum.BlockTopToBottom '排列方式改为从左到右
'题名
rx.Text = "增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew方法" '设置文本对象的内容
rx.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx.Style.LineSpacing = 120 '1.3倍行距
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rx.Style.Spacing.Top = 3 '距离右边的对象2毫米
rx.Style.Spacing.Bottom = 3 '距离右边的对象2毫米
'档案号
rx2.Text =  "增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew方法增加一行或多行,并返回所增加的第一行,同时将输入焦点移到该行上,等同于Table的AddNew" '设置文本对象的内容
rx2.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx2.Style.LineSpacing = 120 '1.3倍行距
rx2.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx2.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rk.Children.Add(rx)
rk.Children.Add(rx2)

Dim g As Graphics = basemainform.CreateGraphics
g.PageUnit = GraphicsUnit.Millimeter '设置计算打印高度时的单位为毫米,和专业报表的单位一致
Dim size As Object
size = g.MeasureString(rx2.Text, rx2.Style.Font, 100)
Dim h As Integer = size.height
msgbox(h)
rt.Y = (210 - (h + 50 ) ) / 2 - 13
msgbox(rt.Y)
'rt.height = rt.rows(0).Height + rt.rows(1).Height

Dim s As Integer
's = CInt((210 - rt.Height)/2)
'Doc.PageSetting.TopMargin = rt.height '设置上边距
Doc.Preview() '预览报表


 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/10/23 16:45:00 [只看该作者]

 非常棒!非常棒!

 回到顶部