以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  专业报表打印图片的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=102838)

--  作者:HappyFt
--  发布时间:2017/6/26 17:02:00
--  专业报表打印图片的问题

图片点击可在新窗口打开查看此主题相关图片如下:专业报表图片.jpg
图片点击可在新窗口打开查看

如上图,用户要求打印图片在中间,图片是在ftp服务器上,有一列专门显示地址,这种方式要如何实现,还有图片显示位置有合并是不是只能显示在最左侧,不能在中间?

谢谢!

--  作者:有点色
--  发布时间:2017/6/26 18:07:00
--  

位置问题,我测试没问题

 

Dim doc As New PrintDoc \'定义一个报表
Dim rt As New prt.RenderTable() \'定义一个表格对象
Dim rm As New prt.RenderImage() \'定义一个图片对象
rm.Image = GetImage("d:\\test.ico") \'请改为实际的图标名称和路径
rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center \'图片水平居中
rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Center \'图片垂直居中

rm.Style.ImageAlign.StretchHorz = False \'禁止水平方向扩展图片
rm.Style.ImageAlign.StretchVert = False \'禁止垂直方向扩展图片
doc.Body.Children.Add(rt) \'将表格对象加入到报表中
rt.Style.GridLines.All = New prt.Linedef(Color.DarkGray) \'将表格的颜色设为深灰色
rt.Rows.Count = 10 \'设置行数
rt.Cols.Count = 3 \'设置列数
rt.Width = 100 \'设置表格的宽度
rt.Height = 80 \'设置表格的高度
rt.Cells(1,1).SpanRows = 5
rt.Cells(1,1).RenderObject = rm \'将单元格内容设置为图片对象rm
Doc.Preview() \'预览报表


--  作者:有点色
--  发布时间:2017/6/26 18:08:00
--  
 ftp服务器上的图片,你需要先下载下来才能引用到专业报表里面去的。
--  作者:HappyFt
--  发布时间:2017/6/26 21:09:00
--  
sqltable的图片列不能打开图片浏览器窗口吗?在窗口afterload中写了如下代码
Tables(e.Form.name & "_明细").Cols("图片").OpenWindow()

不起作用,是不是只能另外增加一个图片浏览器控件来绑定到图片列?

--  作者:有点蓝
--  发布时间:2017/6/26 21:46:00
--  
需要先设置列的扩展类型和ftp设置的:



--  作者:HappyFt
--  发布时间:2017/6/26 21:56:00
--  
\'---设置ftp图片列的属性
If Tables(winName & "_" & ctl.name).Cols.Contains("图片") Then
    DataTables(winName & "_" & ctl.name).DataCols("图片").ExtendType = ExtendTypeEnum.Images \'图片列
    DataTables(winName & "_" & ctl.name).DataCols("图片").Remote = True
    DataTables(winName & "_" & ctl.name).DataCols("图片").FTPClient.Host = ftp_Host
    DataTables(winName & "_" & ctl.name).DataCols("图片").FTPClient.Account = ftp_User
    DataTables(winName & "_" & ctl.name).DataCols("图片").FTPClient.password = ftp_Pwd
    DataTables(winName & "_" & ctl.name).DataCols("图片").FTPClient.port = ftp_Port  \'ftp端口不是21时必须指定
    DataTables(winName & "_" & ctl.name).DataCols("图片").FTPClient.UTF8 = True \'避免中文乱码
    Tables(winName & "_" & ctl.name).Cols("图片").OpenWindow  \'打开图片列窗口

这些在sqltable加载后都有设置的,在图片列中点击单元格按钮都可以正常打开显示,但用户想在切换行时就能显示不同的图片,所以不知道为何红色这个代码不起作用?


--  作者:有点蓝
--  发布时间:2017/6/26 22:44:00
--  
嗯。这个只有主表起作用。窗口表用图片控件吧
--  作者:有点色
--  发布时间:2017/6/27 8:34:00
--  
以下是引用HappyFt在2017/6/26 21:56:00的发言:
\'---设置ftp图片列的属性

这些在sqltable加载后都有设置的,在图片列中点击单元格按钮都可以正常打开显示,但用户想在切换行时就能显示不同的图片,所以不知道为何红色这个代码不起作用?

 

单独增加pictureviewer控件才行的。


--  作者:HappyFt
--  发布时间:2017/6/27 22:35:00
--  
Dim ColNames As String() = New String(){"序号","产品编码","品名","图片","规格","数量","计量单位","箱号","装箱数","备注"}
Dim drs As List(Of DataRow)
drs = DataTables("订单_明细").Select("订单编号 = \'" & CurRow("订单编号") & "\'")
If drs.count > 0 Then  \'如果有值
    For i As Integer = 0 To drs.Count-1
        rt.Rows(rt.Rows.Count).Height = rh
        For c As Integer = 0 To ColNames.Length -1
            If c = 0 Then  \'序号列格式化为两位
                rt.cells(rt.Rows.Count-1,c).text = Format(i+1,"00")
            ElseIf c = 3 Then  \'图片列
                Dim rm As New prt.RenderImage() \'定义一个图片对象
                rm.Image = GetImage(drs(i)(ColNames(c))) \'请改为实际的图标名称和路径
                rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center \'图片水平居中
                rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Center \'图片垂直居中
                rm.Style.ImageAlign.StretchHorz = False \'禁止水平方向扩展图片
                rm.Style.ImageAlign.StretchVert = False \'禁止垂直方向扩展图片
                rt.cells(rt.Rows.Count-1,c).RenderObject = rm \'将单元格内容设置为图片对象rm
.......
            End If
        Next
    Next
End If

请教下老师,红色的地方因为图片列是用ftp上的jpg文件,用msgxob()显示出来的路径是"/Photo/11-UR80.jpg"

打印预览的结果没有出错,但是图片列全部都变为空了,那个地方的路径应该怎么写才正确?
谢谢! 

--  作者:有点蓝
--  发布时间:2017/6/27 22:51:00
--  
自己检查一下本地的真正的图片路径是什么,相应改改下面红色代码

Dim ColNames As String() = New String(){"序号","产品编码","品名","图片","规格","数量","计量单位","箱号","装箱数","备注"}
Dim drs As List(Of DataRow)
drs = DataTables("订单_明细").Select("订单编号 = \'" & CurRow("订单编号") & "\'")
Dim fd As String = DataTables("订单_明细").DataCols("图片").DefaultFolder 
If fd = "" Then fd = ProjectPath & "Attachments"
If drs.count > 0 Then  \'如果有值
    For i As Integer = 0 To drs.Count-1
        rt.Rows(rt.Rows.Count).Height = rh
        For c As Integer = 0 To ColNames.Length -1
            If c = 0 Then  \'序号列格式化为两位
                rt.cells(rt.Rows.Count-1,c).text = Format(i+1,"00")
            ElseIf c = 3 Then  \'图片列
                Dim rm As New prt.RenderImage() \'定义一个图片对象
                rm.Image = GetImage(fd & drs(i)(ColNames(c))) \'请改为实际的图标名称和路径
                rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center \'图片水平居中
                rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Center \'图片垂直居中
                rm.Style.ImageAlign.StretchHorz = False \'禁止水平方向扩展图片
                rm.Style.ImageAlign.StretchVert = False \'禁止垂直方向扩展图片
                rt.cells(rt.Rows.Count-1,c).RenderObject = rm \'将单元格内容设置为图片对象rm
.......
            End If
        Next
    Next
End If