Foxtable(狐表)用户栏目专家坐堂 → 专业报表存为PDF格式文件,图片不显示


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

主题:专业报表存为PDF格式文件,图片不显示

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


加好友 发短信
等级:童狐 帖子:249 积分:3102 威望:0 精华:0 注册:2012/5/13 14:59:00
专业报表存为PDF格式文件,图片不显示  发帖心情 Post By:2012/8/9 15:08:00 [只看该作者]

生成专业报表,在预览时显示图片,存为PDF格式时图片不显示,请教解决办法。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/9 15:42:00 [只看该作者]

我测试没有问题,也许你的pdf阅读软件有问题吧。

打开基本功能演示文件,在命令窗口执行下面的代码看看:

 

Dim doc As New PrintDoc '定义一个报表
Dim rt As New prt.RenderTable() '定义一个表格对象
Dim rx As New prt.RenderText '定义一个文本对象
Dim CurRow As Row = Tables("员工").Current
'加入标题
rx.text = "员工资料卡"
rx.Style.FontBold = True '字体加粗
rx.Style.FontSize = 16 '大体大小为16磅
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中排列
rx.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
doc.Body.Children.Add(rx) '加入到报表中
'指定行数、列数、列宽、行高
rt.Rows.Count = 7 '设置总行数
rt.Cols.Count = 5 '设置总列数
rt.Height = 80 '设置表格的高度为80毫米
rt.Rows(6).Height = 40 '设置第7行(显示备注的行)的高度为40毫米,剩余高度被平均分排到其他行
rt.Cols(0).Width = 24 '设置前四列的宽度,剩余的宽度被分配给5列(显示图片的那列)
rt.Cols(1).Width = 35
rt.Cols(2).Width = 24
rt.Cols(3).Width = 40
'设置合并单元格
rt.Cells(0,4).SpanRows = 6 '第1行第5个单元格向下合并6行(用于显示照片)
rt.Cells(4,1).SpanCols = 3 '第5行第2个单元格向右合并3列(用于显示地址)
rt.Cells(6,0).SpanCols = 5 '第7行第1个单元格向右合并5列(用于显示备注)
'设置表格样式
rt.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
rt.Style.GridLines.All = New prt.Linedef '设置网格线
rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
rt.Rows(6).Style.TextAlignVert = prt.AlignVertEnum.Top '唯独第7行是备注,内容靠上对齐
'下面很简单,指定每一个单元格的内容
rt.Cells(0,0).Text= "姓名"
rt.Cells(0,1).Text = CurRow("姓名")
rt.Cells(0,2).Text= "出生日期"
rt.Cells(0,3).Text = CurRow("出生日期")
rt.Cells(1,0).Text= "部门"
rt.Cells(1,1).Text = CurRow("部门")
rt.Cells(1,2).Text= "雇佣日期"
rt.Cells(1,3).Text = CurRow("雇佣日期")
rt.Cells(2,0).Text= "性别"
rt.Cells(2,1).Text = CurRow("性别")
rt.Cells(2,2).Text= "职务"
rt.Cells(2,3).Text = CurRow("职务")
rt.Cells(3,0).Text= "城市"
rt.Cells(3,1).Text = CurRow("城市")
rt.Cells(3,2).Text= "邮政编码"
rt.Cells(3,3).Text = CurRow("邮政编码")
rt.Cells(4,0).Text= "地址"
rt.Cells(4,1).Text = CurRow("地址")
rt.Cells(5,0).Text= "家庭电话"
rt.Cells(5,1).Text = CurRow("家庭电话")
rt.Cells(5,2).Text= "办公电话"
rt.Cells(5,3).Text = CurRow("办公电话")
rt.Cells(6,0).Text = CurRow("备注")
rt.Cells(0,4).Image = GetImage(CurRow("照片"))
doc.Body.Children.Add(rt) '将表格对象加入到报表中
Doc.savepdf("c:\data\abc.pdf")

 


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


加好友 发短信
等级:童狐 帖子:249 积分:3102 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2012/8/9 16:57:00 [只看该作者]

按照你的程序是可以显示图片

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


加好友 发短信
等级:童狐 帖子:249 积分:3102 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2012/8/9 17:00:00 [只看该作者]

Dim i As Integer=0 '记录数
Dim j As Integer=6 '每个记录多少行
Dim k As Integer=0

Dim 现货销售进货标价合计 As Integer
Dim 现货销售成交额合计 As Integer

Dim doc As New PrintDoc
doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight
Doc.PageSetting.LeftMargin = 15 '设置左边距
Doc.PageSetting.RightMargin = 15 '设置右边距
Doc.PageSetting.TopMargin = 8 '设置上边距
Doc.PageSetting.BottomMargin = 8 '设置下边距


Dim rxh As New prt.RenderTable
rxh.Cells(0,0).Text = "生成日期:" & Date.today
rxh.Cells(0,1).Text =  e.Form.Controls("年").value & "年" & e.Form.Controls("月").value & "月现货销售报表"
rxh.Cells(0,2).Text = "第[PageNo]页,共[PageCount]页"
rxh.Cols(0).Style.TextAlignHorz = prt.AlignHorzEnum.Left
rxh.Cols(1).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rxh.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.right
rxh.Style.Borders.Bottom = New prt.LineDef '设置底边框
rxh.CellStyle.Spacing.Bottom = 0.5 '底端内容缩进0.5毫米
rxh.Cols(0).Style.FontSize = 8 '字体大小
rxh.Cols(1).Style.FontSize = 10 '字体大小
rxh.Cols(2).Style.FontSize = 8 '字体大小
Doc.PageHeader = rxh '作为页眉使用

Dim rt As New prt.RenderTable() '定义一个表格对象
doc.Body.Children.Add(rt) '将表格对象加入到报表中
rt.Style.GridLines.All = New prt.Linedef
rt.Cols(0).Width =60 '
rt.Cols(1).Width =40 '
rt.Cols(2).Width =80 '
rt.Cols(3).Width =40 '
rt.Cols(4).Width =80 '

rt.Style.TextAlignHorz = prt.AlignHorzEnum.left '所有文本内容靠左对齐
rt.CellStyle.Spacing.All = 0.5 '内容距离网格线0.5毫米
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行内容水平居中
rt.Rows(0).Style.TextAlignVert = prt.AlignVertEnum.Center '第一行内容垂直居中
rt.Rows(0).Style.BackColor = Color.LightGray '第一行背景颜色设为灰色.
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.page

'定义表头
Dim rrx As New prt.RenderText '定义一个文本对象
rrx.Text = "图片"
rt.Cells(0, 0).RenderObject = rrx '将文本对象放置在单元格中
Dim rrx1 As New prt.RenderText '定义一个文本对象
rrx1.Text = "产品信息"
rt.Cells(0, 1).RenderObject = rrx1 '将文本对象放置在单元格中
Dim rrx2 As New prt.RenderText '定义一个文本对象
rrx2.Text = "销售信息"
rt.Cells(0, 3).RenderObject = rrx2 '将文本对象放置在单元格中
Dim rrx3 As New prt.RenderText '定义一个文本对象
rt.cells(0,1).SpanCols = 2 '合并单元格
rt.cells(0,3).SpanCols = 2 '合并单元格


'现货销售部分报表
For Each dr In DataTables("进口货物").datarows
   
    If dr("销售日期").year=e.Form.Controls("年").value And dr("销售日期").month=e.Form.Controls("月").value And dr("入库数量")=1  Then
        '定义高度
        For k=1 To j
            rt.rows(i*j+k-1).Height = 5 '设置表格每行的高度
        Next
        '产品信息
        Dim rx1 As New prt.RenderText '定义一个文本对象
        rx1.Text = "fa piao编号"
        rt.Cells(i*j+1, 1).RenderObject = rx1 '将文本对象放置在单元格中
       
        Dim rx2 As New prt.RenderText '定义一个文本对象
        rx2.Text = dr("fa piao号码")
        rt.Cells(i*j+1, 2).RenderObject = rx2 '将文本对象放置在单元格中
       
        Dim rx3 As New prt.RenderText '定义一个文本对象
        rx3.Text = "入库日期"
        rt.Cells(i*j+2, 1).RenderObject = rx3 '将文本对象放置在单元格中
       
        Dim rx4 As New prt.RenderText '定义一个文本对象
        rx4.Text = dr("入库日期")
        rt.Cells(i*j+2, 2).RenderObject = rx4 '将文本对象放置在单元格中
       
        Dim rx5 As New prt.RenderText '定义一个文本对象
        rx5.Text = "型号"
        rt.Cells(i*j+3, 1).RenderObject = rx5 '将文本对象放置在单元格中
       
        Dim rx6 As New prt.RenderText '定义一个文本对象
        rx6.Text = dr("外购型号")
        rt.Cells(i*j+3, 2).RenderObject = rx6 '将文本对象放置在单元格中
       
        Dim rx7 As New prt.RenderText '定义一个文本对象
        rx7.Text = "颜色编码"
        rt.Cells(i*j+4, 1).RenderObject = rx7 '将文本对象放置在单元格中
       
        Dim rx8 As New prt.RenderText '定义一个文本对象
        rx8.Text = dr("颜色名称或编码")
        rt.Cells(i*j+4, 2).RenderObject = rx8 '将文本对象放置在单元格中
       
        Dim rx9 As New prt.RenderText '定义一个文本对象
        rx9.Text = "铜件编号"
        rt.Cells(i*j+5, 1).RenderObject = rx9 '将文本对象放置在单元格中
       
        Dim rx10 As New prt.RenderText '定义一个文本对象
        rx10.Text = dr("材质说明或编码")
        rt.Cells(i*j+5, 2).RenderObject = rx10 '将文本对象放置在单元格中
       
        Dim rx11 As New prt.RenderText '定义一个文本对象
        rx11.Text = "单价"
        rt.Cells(i*j+6, 1).RenderObject = rx11 '将文本对象放置在单元格中
       
        Dim rx12 As New prt.RenderText '定义一个文本对象
        rx12.Text = dr("sys_进货标价")
        rt.Cells(i*j+6, 2).RenderObject = rx12 '将文本对象放置在单元格中
       
       
        '销售信息
        Dim rx13 As New prt.RenderText '定义一个文本对象
        rx13.Text = "销售日期"
        rt.Cells(i*j+1, 3).RenderObject = rx13 '将文本对象放置在单元格中
       
        Dim rx14 As New prt.RenderText '定义一个文本对象
        rx14.Text = dr("销售日期")
        rt.Cells(i*j+1, 4).RenderObject = rx14 '将文本对象放置在单元格中
       
        Dim rx15 As New prt.RenderText '定义一个文本对象
        rx15.Text = "销售单号"
        rt.Cells(i*j+2,3).RenderObject = rx15 '将文本对象放置在单元格中
       
        Dim rx16 As New prt.RenderText '定义一个文本对象
        rx16.Text = dr("销售单号")
        rt.Cells(i*j+2, 4).RenderObject = rx16 '将文本对象放置在单元格中
        Dim rx17 As New prt.RenderText '定义一个文本对象
        rx17.Text = "成交金额"
        rt.Cells(i*j+3,3).RenderObject = rx17 '将文本对象放置在单元格中
       
        Dim rx18 As New prt.RenderText '定义一个文本对象
        rx18.Text = dr("成交金额")
        rt.Cells(i*j+3, 4).RenderObject = rx18 '将文本对象放置在单元格中
        Dim rx19 As New prt.RenderText '定义一个文本对象
        rx19.Text = "单位"
        rt.Cells(i*j+4,3).RenderObject = rx19 '将文本对象放置在单元格中
       
        Dim rx20 As New prt.RenderText '定义一个文本对象
        rx20.Text = dr("单位")
        rt.Cells(i*j+4, 4).RenderObject = rx20 '将文本对象放置在单元格中
       
       
        Dim rx21 As New prt.RenderText '定义一个文本对象
        rx21.Text = "备注"
        rt.Cells(i*j+5,3).RenderObject = rx21 '将文本对象放置在单元格中
       
        Dim rx22 As New prt.RenderText '定义一个文本对象
        rx22.Text = "现货销售"
        rt.Cells(i*j+5, 4).RenderObject = rx22 '将文本对象放置在单元格中
       
       
       
       
       
        Dim rm As New prt.RenderImage() '定义一个图片对象
        rt.Cells(i*j+1,0).SpanRows = 6
        If dr1("图片")=""
        Else
            dr1 = DataTables("产品价格").Find("型号条形码 = '" & dr("型号条形码") & "'")
            rm.Image = GetImage("e:\网盘\产品图片\" &  dr1("图片").SubString(2))
            rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '图片水平居中
            rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Center '图片垂直居中
            rm.Style.ImageAlign.StretchHorz = True '禁止水平方向扩展图片
            rm.Style.ImageAlign.StretchVert = True '禁止垂直方向扩展图片
            rm.Style.ImageAlign.KeepAspectRatio=True
            ' rm.Width = 18
            rm.Height =30
            rt.Cells(i*j+1,0).RenderObject = rm '将单元格内容设置为图片对象rm
        End If
        现货销售进货标价合计=现货销售进货标价合计+dr("sys_进货标价")
        现货销售成交额合计=现货销售成交额合计+dr("成交金额")
        i=i+1
    End If
   
   
Next
Dim rx30 As New prt.RenderText '定义一个文本对象
rx30.Text = "现货销售统计"
rt.Cells(i*j+1, 0).RenderObject = rx30 '将文本对象放置在单元格中

 


Dim rx31 As New prt.RenderText '定义一个文本对象
rx31.Text = "现货销售进货标价合计"
rt.Cells(i*j+1, 1).RenderObject = rx31 '将文本对象放置在单元格中

Dim rx32 As New prt.RenderText '定义一个文本对象
rx32.Text = "¥" & 现货销售进货标价合计
rt.Cells(i*j+1, 2).RenderObject = rx32 '将文本对象放置在单元格中


Dim rx33 As New prt.RenderText '定义一个文本对象
rx33.Text = "现货销售成交额合计"
rt.Cells(i*j+1, 3).RenderObject = rx33 '将文本对象放置在单元格中

Dim rx34 As New prt.RenderText '定义一个文本对象
rx34.Text = "¥" & 现货销售成交额合计
rt.Cells(i*j+1, 4).RenderObject = rx34 '将文本对象放置在单元格中


‘Doc.Preview()

doc.savepdf(e.Form.Controls("存放地址").value & "现货销售月报表(" & e.Form.Controls("年").value & "年" & e.Form.Controls("月").value & "月).pdf")


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


加好友 发短信
等级:童狐 帖子:249 积分:3102 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2012/8/9 17:01:00 [只看该作者]

请你看看上面程序有什么问题?

 


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/8/9 17:27:00 [只看该作者]

我看不出来,最好用简单的代码说明问题,直入主题。

另外注意你的图片文件是不是本来就不存在,或者你代码中合成的路径和文件名有问题。


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


加好友 发短信
等级:童狐 帖子:249 积分:3102 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2012/8/9 17:53:00 [只看该作者]

原因找出来了,图片的高度比单元格高度高,所以生成PDF格式报表时图片不能显示,但用打印预览就不存在这个问题


 回到顶部