Foxtable(狐表)用户栏目专家坐堂 → 专业报表中的图片问题


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

主题:专业报表中的图片问题

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
专业报表中的图片问题  发帖心情 Post By:2025/2/5 16:44:00 [只看该作者]

Dim filterpzh As String
Dim zzlx As String
Dim cmb As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim doc As New PrintDoc '定义一个报表
Dim cs As List(Of String) = Tables(vars("pzsybtb")).DataTable.GetValues("号码", filterpzh, "号码")
For Each c As String In cs
    
    Dim r1 As Integer=0
    
    Dim drs As List(Of DataRow)
    drs = DataTables(vars("pzsybtb")).Select("[号码] = " & CInt(c) & " And 经营单位 = '"& _jydw &"'","分录序号")
    
    Dim n0 As Integer
    n0= drs.count  Mod 6 '计算余数
    
    Dim yecount As Integer
    yecount  =drs.count \6
    
    
    If n0  > 0 Then
        yecount  =drs.count \6  + 1
    Else
    End If
    
    For ye As Integer = 1 To yecount
        
        r1=r1+6
        Dim sn As Integer = ye* 6
        Dim k As Integer = (ye -1) *6
        
        Dim ra As New prt.RenderArea '定义一个容器
        ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never  '禁止容器因为分页而被垂直分割
        Dim rt As New prt.RenderTable() '定义一个表格对象
        Dim rt1 As New prt.RenderTable() '定义一个表格对象
        ' Dim rt2 As New prt.RenderTable '定义一个表格对象
        Dim rx As New prt.RenderText '定义一个文本对象
        
        rx.text = drs(k)("凭证字")
        
        rx.Style.FontBold = True '字体加粗
        rx.Style.FontSize = 16 '大体大小为16磅
        rx.Style.F
        rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中排列
        rx.Style.Spacing.Bottom = 1 '和下面的对象(表格)距离3毫米
        
        ra.Children.Add(rx) '加入到容器中
        
        
        Dim Sum,sum1 As Double
        Dim sum2 As Integer
        
        Sum =  Tables(vars("pzsybtb")).Compute("Sum(借方金额)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = '"& _jydw &"'")
        Sum1 = Tables(vars("pzsybtb")).Compute("Sum(贷方金额)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = '"& _jydw &"'")
        Sum2 = Tables(vars("pzsybtb")).Compute("Sum(附件数)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = '"& _jydw &"'")
        
        rt.Cells(0,0).Text = "摘要"
        rt.Cells(0,1).Text = "科目名称"
        rt.Cells(0,2).Text = "币别"
        rt.Cells(0,3).Text = "原币金额"
        rt.Cells(0,4).Text = "汇率"
        rt.Cells(0,5).Text = "借方金额"
        rt.Cells(0,6).Text = "贷方金额"
        
        If ye = yecount Then
            rt.Cells(7,0).Text = "合  计:"
            rt.Cells(7,1).Text =CUMoney(sum)
            
            rt.Cells(7,1).SpanCols = 4
            rt.Cells(7,5).Text = sum
            rt.Cells(7,6).Text =  sum1
        Else
            rt.Cells(7,0).Text = "转下页"
        End If
        
        rt1.Cells(1,0).Text = ""
        rt1.Cells(1,6).Text =  drs(k)("号码") & " ("& ye &"/" & yecount & ")"
        rt1.Cells(1,3).Text = ""
        
        
        rt.Cells(8,1).Text = "主管: "
        
        rt.Cells(8,5).Text = "制单: "
        rt1.Rows.Count = 2 '设置总行数
        rt1.Cols.Count = 7 '设置总列数
        rt.Rows(0).Style.FontBold = True '字体加粗
        rt.Rows(7).Style.FontBold = True
        
        
        For i As Integer = 0 To 7
            rt.rows(i).Style.GridLines.All = New prt.Linedef(Color.Gray) '灰色网格线
        Next
        rt.Rows.Count = 9 '设置总行数
        rt.Cols.Count = 7 '设置总列数
        rt.Height = 120 '设置表格的高度为120毫米
        rt1.rows(0).Height= 5
        rt1.rows(1).Height= 5
        rt.rows(0).Height= 10
        rt.rows(7).Height= 8
        rt.rows(8).Height= 8
        rt.Cols(0).Width =40
        rt.Cols(1).Width =60
        rt.Cols(2).Width =10
        rt.Cols(4).Width =12
        
        Dim m As Integer =1
        
        For  j As Integer = (ye -1) *6   To drs.count - 1
            
            If m<= 6 Then
                rt.Cells(m,0).Text = drs(j)("摘要")
                
                rt.Cells(m,1).Text = drs(j)("科目名称")
                
                
                rt.Cells(m,2).Text = drs(j)("币别")
                
                
                rt.Cells(m,5).Text = drs(j)("借方金额")
                
                
                rt.Cells(m,6).Text = drs(j)("贷方金额")
                
                m=m+1
            End If
        Next
        
        rt1.Style.Spacing.Top = 1
        rt1.Cells(1,1).Style.TextAlignHorz=prt.AlignHorzEnum.Center
        rt1.Cells(1,1).Style.TextAlignVert = prt.AlignVertEnum.Top
        rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
        rt.Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
        
        
        
        rt.Style.Spacing.Bottom = 20 '和下一个资料卡的距离是5毫米
        rt.Style.F
        rt1.Style.F
        rt.Style.FontSize = 9 '字体大小为10磅
        
        ra.Children.Add(rt1) '加入到容器中
        ra.Children.Add(rt) '加入到容器中
        
        
        If cmb.value = "自定义" Then
            doc.PageSetting.Width = val(e.Form.Controls("TextBox3").text) '纸张宽度为100毫米
            doc.PageSetting.Height = val(e.Form.Controls("TextBox4").text) '纸张高度为120毫米
            If val(e.Form.Controls("TextBox3").text) > val(e.Form.Controls("TextBox4").text)  Then
                doc.AutoRotate = False  '如果纸张的宽度超过高度,要加上这行代码
            End If
        Else
            doc.PageSetting.PaperKind = zzlx '纸张类型改为a4
        End If
        
        Doc.PageSetting.TopMargin = 15
        Doc.PageSetting.BottomMargin = 5
        Doc.PageSetting.LeftMargin = 10 '设置左边距
        Doc.PageSetting.RightMargin = 10 '设置右边距
        
        doc.Body.Children.Add(ra)
        
        
    Next
    
    '开始加入图片
    If 1= 1 Then
        Dim gr As DataRow
        gr = DataTables("GLVchFileAddress").Find("凭证号 = '" & drs(0)("凭证号") & "'")
        
        If gr IsNot Nothing Then
            
            Dim lst As New List(of String)
            
            lst = gr.Lines("FFileAddress")
            For p As Integer = 0 To lst.count -1
                
                
                Dim rm As New prt.RenderImage '定义一个图片对象
                
                
                rm.Width = "Parent.Width" '对象宽度为页面的90% ,190
                
                If cmb.value = "A4" Then
                    rm.Height = "50%Parent.High" '"Auto" '高度由图片大小自动决定130
                ElseIf cmb.value = "自定义" Then
                    rm.Height = "Parent.High" '"Auto" '高度由图片大小自动决定
                End If
                rm.Image = GetImage(lst(p)) '设置图片
                
                rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '居中显示
                
                
                doc.Body.Children.Add(rm) '将图片对象加入报表
            Next
            
        End If
        
    End If
    
    
Next
Doc.Preview() '预览报表




图片有时候无法生成,请教一下,是不是代码问题?还是缓存问题?
软件关掉,重新运行后又可以生成图片。

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


加好友 发短信
等级:超级版主 帖子:112347 积分:571985 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/2/5 16:52:00 [只看该作者]

应该不是代码问题。预览后没有图片的时候,看看内存占有率是多少。图片分辨率是不是过大?

另外页面设置的代码应该放到循环外部,设置一次即可,没有必要放到循环里面

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/5 17:31:00 [只看该作者]

关掉FOX,内存占用34%,因为打印机在打印。
打开专业报表,
1,生成100页,其中50页是带图片(正常显示)的,内存41%。
2,生成100页,其中50页是带图片(图片不能显示)的,内存也是41%。
3,100页都不带图片,内存36%。
上一次100页不能显示图片的话,改成1-10页,有时候能显示图片,有时候不能显示图片。

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/5 17:32:00 [只看该作者]

会不会跟我的系统盘空间太少了有关系?我的系统盘可用空间只有6G了。

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/5 17:33:00 [只看该作者]

图片分辨率300

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/5 18:04:00 [只看该作者]

而且有时候是中间会有几页图片不显示。。。我的图片尺寸大小都是一样的。图片都在本地文件夹。
有时候,下次预览时,上次打不开的图片又显示了。
[此贴子已经被作者于2025/2/5 18:17:45编辑过]

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/5 18:31:00 [只看该作者]

我在 lst = gr.Lines("FFileAddress") 后面加上图片数量统计,ctnum =ctnum + lst.count ,图片统计出来的数量是准确的。但是预览50页的时候能正常显示,预览的页数越多,就只有前面几页显示图片了

             

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


加好友 发短信
等级:超级版主 帖子:112347 积分:571985 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/2/6 8:42:00 [只看该作者]

Foxtable是32位程序,大概能用到1G左右的内存,打印的时候如果Foxtable占用接近900M应该是可用内存不足了。

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


加好友 发短信
等级:超级版主 帖子:112347 积分:571985 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/2/6 8:43:00 [只看该作者]

另外需要直接打印,如:Doc.Print(),不能在预览界面里点击打印

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


加好友 发短信
等级:小狐 帖子:310 积分:2921 威望:0 精华:0 注册:2018/5/21 16:49:00
  发帖心情 Post By:2025/2/6 16:33:00 [只看该作者]

如何解决内存不足的问题?只能每次少生成几页吗?

 回到顶部
总数 13 1 2 下一页