以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多张图片如何打印在一个单元格中?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=133524)

--  作者:happyft
--  发布时间:2019/4/15 19:06:00
--  多张图片如何打印在一个单元格中?
图片列是保存在远程的ftp服务器上的,有时一个产品会有多张图片,如果有多张时,图片列的值就如下所示:
/Photo/产品/G1050123.jpg
/Photo/产品/G1050124.jpg
/Photo/产品/G1050125.jpg

 \'----打印单张图片---------------------------------
    Dim rm As New prt.RenderImage() \'定义一个图片对象
    rm.Image = GetImage("ABC.jpg") \'图片必须保存到attachment下面
    rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Left \'居中显示
    rt.Cells(rt.Rows.Count-6,1).RenderObject = rm \'将单元格内容设置为图片对象rm
上面是在专业报表打印单张图片的代码,没有问题,
但如果要上面的远程ftp上的这三张图片打印在一个单元格中,自动缩放,应该如何写代码?
谢谢!


--  作者:有点蓝
--  发布时间:2019/4/15 20:23:00
--  
把图片放到RenderArea中,然后再把RenderArea放入单元格:http://www.foxtable.com/webhelp/scr/1185.htm
--  作者:HappyFt
--  发布时间:2019/4/16 16:33:00
--  

 \'----在合并的最下面一个单元格才显示图片---------------------------------
    If CurRow("品质图片") > "" Then
        Dim ra2 As New prt.RenderArea \'定义一个容器
        ra2.Stacking = prt.StackingRulesEnum.InlineLeftToRight  \'从左到右排列图片
        Dim strs As String = CurRow("品质图片")
        strs = strs.Replace("/","\\")
        strs = strs.Replace(vblf,"")  \'清除换行符
        For Each str As String In strs.Split(vbcr) \'以回车符为界转换为数组
            msgbox(ProjectPath & "RemoteFiles" & str)
            Dim rm As New prt.RenderImage() \'定义一个图片对象
            rm.Image = GetImage(ProjectPath & "RemoteFiles" & str)
            rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Left \'显示方式
            ra2.Children.Add(rm) \'将文本对象加入到容器ra中
        Next
        rt.Cells(rt.Rows.Count-6,1).RenderObject = ra2  \'将单元格内容设置为图片对象rm
    End If
    \'----显示图片---------------------------------

上面的代码执行时如果有多张图片,都只能显示最面上那一张,其他的都被第一张盖住了,
如何才能让单元格中的多个图片从上到下或才从左到右自动缩放排列在一起并列显示出来?
谢谢!



--  作者:有点甜
--  发布时间:2019/4/16 17:09:00
--  

我测试代码没问题,参考

 

Dim doc As New PrintDoc
Dim rt As New prt.RenderTable
Dim ra As prt.RenderArea
rt.Style.GridLines.All = New prt.LineDef
rt.CellStyle.Spacing.All = 1 \'单元格内容和网格线距离1毫米
rt.Cols.Count = 3 \'总列数为3
For i As Integer = 0 To 3
    ra = rt.Cells(i,0).Area \'引用单元格的容器   
    ra.Stacking = prt.StackingRulesEnum.InlineLeftToRight  \'从左到右排列图片
   
    For j As Integer = 1 To 5
        Dim rm As New prt.RenderImage() \'定义一个图片对象
        rm.Image = GetImage("d:\\test.ico")
        rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Left \'显示方式
        ra.Children.Add(rm) \'将文本对象加入到容器ra中
    Next
   
Next
doc.Body.Children.Add(rt)
Doc.Preview()


--  作者:HappyFt
--  发布时间:2019/4/16 18:15:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20190416181324.png
图片点击可在新窗口打开查看

现在的是有打印出来,但两张图片重叠在一起了,我是问如何将两张图片上下或者左右排列显示在一个单元格当中,
因为那个单元格在纸上的大小已经是固定的,图片数量不确定,有的多,有的少
要怎么办?

--  作者:有点甜
--  发布时间:2019/4/16 18:18:00
--  
我测试4楼代码没问题。请贴出可以执行的代码。
--  作者:HappyFt
--  发布时间:2019/4/16 19:02:00
--  
Dim doc As New PrintDoc
Dim rt As New prt.RenderTable
Dim ra As prt.RenderArea
rt.Style.GridLines.All = New prt.LineDef
rt.CellStyle.Spacing.All = 1 \'单元格内容和网格线距离1毫米
rt.Rows(0).Height = 15
rt.Rows(1).Height = 15
rt.Rows(2).Height = 15
rt.Cells(0,0).SpanRows = 3  \'三行合并为一行

ra = rt.Cells(0,0).Area \'引用单元格的容器
ra.Stacking = prt.StackingRulesEnum.InlineLeftToRight \'从左到右排列图片

For j As Integer = 1 To 3
    Dim rm As New prt.RenderImage() \'定义一个图片对象
    rm.Image = GetImage("d:\\test.ico")
    rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Left \'显示方式
    ra.Children.Add(rm) \'将文本对象加入到容器ra中
Next
doc.Body.Children.Add(rt)
Doc.Preview()

有点类似这样,将三行的单单元格合并为一个后再填充图片,就只能显示一个了

--  作者:HappyFt
--  发布时间:2019/4/16 19:15:00
--  
发现是因为6行合并为一个单元格后,因为行高不够所以多张图片无法并列显示出来,如果加大每行行高就可以,但行高是固定的
这种情况下如果让图片自动缩小到能两张或多张一起显示出来?

--  作者:有点蓝
--  发布时间:2019/4/16 20:19:00
--  
Dim rm As New prt.RenderImage \'定义一个图片对象
rm.Image = GetImage(
"EP1.BMP"\'设置图片
rm.Width = 
"Auto\'宽度
rm.Height = 
"50" \'高度