以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 老大 出手 一个专业报表的 纸张问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=31910) |
-- 作者:jianjingmaoyi -- 发布时间:2013/4/22 22:16:00 -- 老大 出手 一个专业报表的 纸张问题 Dim doc As New PrintDoc Dim rt As New prt.RenderTable \'定义一个新表格 Dim tb As Table = Tables( "出库.出库明细" ) Dim ColNames As New List(Of String) Dim rs As New prt.RenderText() rt.Width = "Parent.Width" rt.Style.Spacing.Top = 21 \'表格和前面对象的垂直间隔为4毫米 rs.Text = "xxxxxxxxxx公司出库单" rs.Style.Font = New Font("微软雅黑",15) rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) rs= New prt.RenderText() rt.Width = "Parent.Width" rt.Style.Spacing.Top = 6 \'表格和前面对象的垂直间隔为4毫米 rs.Text = "xxxxxxxxxxxx" rs.Style.Font = New Font("微软雅黑",10) rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中 doc.Body.Children.Add(rs) \'将文本对象加入到表格中 For Each cl As Col In tb.Cols \'排除隐藏列 Select Case cl.Name Case "商品代码","商品名称","商品类别","出库用途","规格","数量","单价","单位","金额","备注" \' If cl.Visible Then ColNames.Add(cl.Name) \'End If End Select Next rt.Width ="Auto" rt.CanSplitHorz = True rt.Style.Font = tb.Font For c As Integer = 0 To ColNames.Count - 1 rt.Cells(0,c).Text = ColNames(c) rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth rt.Cols(c).Style.TextAlignHorz =prt.AlignHorzEnum.Center rt.Cols(c).Style.TextAlignVert =prt.AlignVertEnum.Center For r As Integer = 0 To tb.Rows.Count -1 rt.Cells(r + 1, c).Text = tb.Rows(r)(ColNames(c)) Next Next rt.Rows.Count = rt.Rows.Count + 1 Dim cnt As Integer = rt.Rows.Count - 1 rt.Cells(cnt,0).Text = "总计" For c As Integer = 0 To ColNames.Count - 1 If tb.Cols(ColNames(c)).IsNumeric Then rt.Cells(cnt,c).Text = tb.Compute("Sum(" & ColNames(c) & ")") End If Next rt.Style.Gridlines.All = New prt.Linedef(Color.LightGray) \' 网格线 doc.Body.Children.Add(rt)doc.PageSetting.Landscape = True \'打印方向 Doc.PageSetting.LeftMargin = 10 \'设置左边距 Doc.PageSetting.RightMargin = 10 \'设置右边距 Doc.PageSetting.TopMargin = 10 \'设置上边距 Doc.PageSetting.BottomMargin = 10 \'设置下边距 doc.PageSetting.Width = 270 doc.PageSetting.Height = 120 这边的纸张大小等于 打印区域的大小 帮我写下代码 doc.Preview() 老大,红字部分帮帮忙 纠结了很多天了.
[此贴子已经被作者于2013-4-22 22:31:33编辑过]
|
-- 作者:jianjingmaoyi -- 发布时间:2013/4/22 22:22:00 -- 宽度可以固定 因为是针式打印机 |
-- 作者:ybil -- 发布时间:2013/4/22 22:28:00 -- 提供个思路:计算出各个对象的高度 +上边距+下边距 |
-- 作者:ybil -- 发布时间:2013/4/22 22:34:00 -- 其实Doc应该有个变量:返回加入报表内容的总高度! |
-- 作者:ybil -- 发布时间:2013/4/22 22:35:00 -- 其实Doc应该有个变量:返回加入报表内容的总高度! |
-- 作者:jianjingmaoyi -- 发布时间:2013/4/22 22:36:00 -- 老大 就这个代码 你帮我写一个尺寸 看看 |
-- 作者:jianjingmaoyi -- 发布时间:2013/4/22 22:45:00 -- 百度没找到这个变量.能否提供一个 |
-- 作者:程兴刚 -- 发布时间:2013/4/22 23:49:00 -- doc.PageSetting.Width = rt.Width + 20
doc.PageSetting.Height = rt.Height +20
|
-- 作者:菲舍尔 -- 发布时间:2013/4/23 1:00:00 -- doc.PageSetting.Height = rt.rows.count * 7 + 2*3.5 + 20 + 10 表格行数 标题行和总计行 页边 标题高度
是想要这样的结果?
|
-- 作者:blackzhu -- 发布时间:2013/4/23 7:09:00 -- 程老大 rt.Width + 20 rt.Width 是不能当数值型用的. 这个我昨日测试过了.
[此贴子已经被作者于2013-4-23 7:12:56编辑过]
|