Foxtable(狐表)用户栏目专家坐堂 → 求助:专业报表打印-多个容器和容器内的排序


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

主题:求助:专业报表打印-多个容器和容器内的排序

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


加好友 发短信
等级:幼狐 帖子:58 积分:519 威望:0 精华:0 注册:2020/6/14 8:45:00
求助:专业报表打印-多个容器和容器内的排序  发帖心情 Post By:2020/7/19 14:01:00 [只看该作者]

专业报表打印中,之前做的容器都能正常显示,但是添加上答案排序后,就乱码了,或者不能正常显示
理想中的输出是图1,一行有三个5连答案,但是实际却是图2
如果是   doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight
上边的就全部乱码嘛,黑乎乎一排
如果是da.Stacking = prt.StackingRulesEnum.InlineLeftToRight
就变成一行一行的啦
自己也试了很多种形式,每个容器都标注排列等,不知道出错在哪儿啦,
希望大神指教,最后程序的结果就是,前面正常输出,最后的答案可以排排序,如第一张图
非常感谢!




图片点击可在新窗口打开查看此主题相关图片如下:理想输出2.png
图片点击可在新窗口打开查看



图片点击可在新窗口打开查看此主题相关图片如下:实际输出1.png
图片点击可在新窗口打开查看




Dim doc As New PrintDoc '定义一个报表
Dim tbl As Table = Tables("DXJ")


'设置页面边距
Doc.PageSetting.LeftMargin = 10 '设置左边距
Doc.PageSetting.RightMargin = 5 '设置右边距
Doc.PageSetting.TopMargin = 20 '设置上边距
Doc.PageSetting.BottomMargin = 20 '设置下边距


For i As Integer = tbl.TopRow To tbl.BottomRow
    Dim rw As Row = tbl.Rows(i)
    Dim rx0 As New prt.RenderText '定义一个文本对象
    
    Dim rx As New prt.RenderText '定义一个文本对象
    Dim rx2 As New prt.RenderText '定义一个文本对象
    Dim rx3 As New prt.RenderText '定义一个文本对象
    Dim rx4 As New prt.RenderText '定义一个文本对象
    
    Dim xxA As New prt.RenderText '定义一个文本对象
    Dim xxB As New prt.RenderText '定义一个文本对象
    Dim xxC As New prt.RenderText '定义一个文本对象
    Dim xxD As New prt.RenderText '定义一个文本对象
    Dim xxE As New prt.RenderText '定义一个文本对象
    
    Dim ra As New prt.RenderArea '定义一个容器
    Dim j As Integer= i-tbl.TopRow+1
    
    '加入题身
    rx0.text = j & "." & ".  " & rw("题身1")
    rx0.Style.FontSize = 14 '大体大小为16磅
    rx0.Style.Spacing.top = 2 '和下面的对象(表格)距离3毫米
    rx0.Style.Spacing.Bottom = 1
    ra.Children.Add(rx0) '加入到容器中
    
    '题身1缩进
    If len(rw("序号"))=1 Then
        rx0.Style.TextIndent = 5
    ElseIf len(rw("序号"))=2 Then
        rx0.Style.TextIndent = 2.5
    ElseIf len(rw("序号"))=3 Then
        rx0.Style.TextIndent = 0
    End If
    
    
    rx2.text = rw("题身2")
    rx2.Style.FontSize = 14 '大体大小为16磅
    rx2.Style.TextIndent = 12.5
    rx2.Style.TextAlignVert = prt.AlignVertEnum.Top
    rx2.Style.Spacing.Bottom = 1
    ra.Children.Add(rx2) '加入到容器中
    
    rx3.text = rw("题身3")
    rx3.Style.FontSize = 14 '大体大小为16磅
    rx3.Style.TextIndent = 12.5
    rx3.Style.Spacing.Bottom = 2
    ra.Children.Add(rx3) '加入到容器中
    
    rx4.text = rw("题身4")
    rx4.Style.FontSize = 14 '大体大小为16磅
    rx4.Style.TextIndent = 12.5
    rx4.Style.Spacing.Bottom = 2
    ra.Children.Add(rx4) '加入到容器中
    
    '选项ABCDE
    xxA.text = "A. " & rw("选项A")
    xxA.Style.FontSize = 14 '大体大小为16磅
    xxA.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
    xxA.Style.TextIndent = 12.5
    ra.Children.Add(xxA) '加入到容器中
    
    xxB.text = "B. " & rw("选项B")
    xxB.Style.FontSize = 14 '大体大小为16磅
    xxB.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
    xxB.Style.TextIndent = 12.5
    ra.Children.Add(xxB) '加入到容器中
    
    xxC.text = "C. " & rw("选项C")
    xxC.Style.FontSize = 14 '大体大小为16磅
    xxC.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
    xxC.Style.TextIndent = 12.5
    ra.Children.Add(xxC) '加入到容器中
    
    xxD.text = "D. " & rw("选项D")
    xxD.Style.FontSize = 14 '大体大小为16磅
    xxD.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
    xxD.Style.TextIndent = 12.5
    ra.Children.Add(xxD) '加入到容器中
    
    xxE.text = "E. " & rw("选项E")
    xxE.Style.FontSize = 14 '大体大小为16磅
    xxE.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
    xxE.Style.TextIndent = 12.5
    ra.Children.Add(xxE) '加入到容器中
    
    '如果CDE没有内容
    If rw("选项E")=Nothing Then
        xxE.text= Nothing
    End If
    
    If rw("选项D")=Nothing Then
        xxD.text= Nothing
    End If
    
    If rw("选项C")=Nothing Then
        xxC.text= Nothing
    End If
    
    
    '条件排序,排成一排
    If len( xxA.text ) <15 And len( xxB.text ) <15 And len( xxC.text ) <15 And len( xxD.text ) <15 Then
        
        xxA.X= 0
        xxA.Y = ""
        
        xxB.X = 40
        
        xxC.X = 80
        xxC.Y= "Prev.TOP"
        
        xxD.X = 120
        xxD.Y = "Prev.TOP"
        
        xxE.X = 0
        xxE.Y = "Prev.TOP+6"
        
        '排成两行
    ElseIf len( xxA.text ) <30 And len( xxB.text ) <30 And len( xxC.text ) <30 And len( xxD.text ) <30 Then
        
        xxA.X= 0
        xxB.X = 80
        xxC.X = 0
        xxC.Y= "Prev.Bottom"
        xxD.X = 80
        xxD.Y = "Prev.Top"
        xxE.Y = 0
        xxE.Y = "Prev.Bottom"
        
    End If
    
    Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
Next

'第二个容器
'参考答案
Dim ckd As New prt.RenderArea '定义一个容器
Dim ckda As New prt.RenderText '定义一个文本对象

ckda.text = " 参考答案 "
ckda.Style.FontSize = 20 '大体大小为16磅
ckda.Style.TextColor = Color.Red  '字符颜色设为红色
ckda.Style.Spacing.top = 5 '和下面的对象(表格)距离3毫米
ckda.Style.Spacing.Bottom = 1

ckd.Children.Add(ckda) '加入到容器中
doc.Body.Children.Add(ckd) '将文本对象加入到报表


'答案报表

'起始位置
Dim qswz As New prt.RenderText '定义一个文本对象


Dim qs As Integer = tbl.TopRow
Dim js As Integer = tbl.BottomRow
Dim gj As Integer
qs = qs + 1
js = js + 1
gj = js - qs + 1
qswz.text= "打印顺序:" & "从" & qs & "至" & js & "题,共计" &  gj  & " 题."
qswz.Style.Padding.Top  = 5 '上边距5毫米
qswz.Style.Padding.Bottom = 5 '下边距5毫米
qswz.Style.FontBold = True '字体加粗
qswz.Style.FontSize = 16 '大体大小为16磅
qswz.Style.TextColor = Color.red
doc.Body.Children.Add(qswz) '将文本对象加入到报表




'答案排序
For i As Integer = tbl.TopRow To tbl.BottomRow Step 5
    Dim rw As Row = tbl.Rows(i)
    Dim h As Integer
    
    Dim s As String = rw("答案")
    For j As Integer = 1 To 4
        If i+j <= tbl.BottomRow
            rw  = tbl.Rows(i+j)
            s = s & rw("答案")
            s=s.ToUpper
h = i-tbl.TopRow+1
        End If
    Next
    Output.Show(h)



    Dim xhda As New prt.RenderText '定义一个文本对象
    
    Dim da As New prt.RenderArea '定义一个容器
da.Stacking = prt.StackingRulesEnum.InlineLeftToRight
    da.Width = 45 '宽度53毫米
    'da.Height = 24 '高度24毫米
    da.SplitHorzBehavior = prt.SplitBehaviorEnum.Never '禁止水平分割
    da.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割
    Doc.Body.ChildRen.Add(da) '将容器加入到报表中
    '加入标题
    


    xhda.text = h & "-" & h+4 & ":" &  s
    
    xhda.Style.FontSize = 16 '大体大小为16磅
    
    da.Children.Add(xhda) '加入到容器中
    
Next



Doc.Preview() '预览报表

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106763 积分:543016 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/19 21:38:00 [只看该作者]

参考:

Dim doc As New PrintDoc '定义一个报表
Dim tbl As Table = Tables("DXJ")

Dim rt As prt.RenderText '定义一个文本对象
For i As Integer = tbl.TopRow To tbl.BottomRow Step 5
    Dim rw As Row = tbl.Rows(i)
    Dim s As String = rw("答案")
    For j As Integer = 1 To 4
        If i+j <= tbl.BottomRow
            rw  = tbl.Rows(i+j)
            s = s & rw("答案")
        End If
    Next
    
    rt = New prt.RenderText() '创建文本对象
    rt.Text = i+1 & "-" & i+5 & ":" &  s '设置文本对象的内容
    rt.Style.Spacing.Bottom = 3 '设置下间隔为3毫米
    rt.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止被垂直分割
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    doc.Body.Children.Add(rt) '将文本对象加入到报表
    
Next
Doc.Preview() '预览报表

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


加好友 发短信
等级:幼狐 帖子:58 积分:519 威望:0 精华:0 注册:2020/6/14 8:45:00
  发帖心情 Post By:2020/7/20 10:52:00 [只看该作者]

以下是引用有点蓝在2020/7/19 21:38:00的发言:
参考:
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:【求助】题目和答案(批量输出).table


很感谢回复,只是有些遗憾,还没达到想要的效果。
希望大神能够继续点播,源文件已经上传,代码在打印输出-报表管理-3【求助】题目+答案
想做的效果是题目批量输出,加上如下的答案排列

1-5:BDBAC   6-10:DCAAD  11-15:CBCBA



此主题相关图片如下:求助1.png
按此在新窗口浏览图片



 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106763 积分:543016 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/20 11:09:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:【求助】题目和答案(批量输出).zip


 回到顶部