以文本方式查看主题

-  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编辑过]