以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  专业报表存为PDF格式文件,图片不显示  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=22341)

--  作者:zunwoun
--  发布时间:2012/8/9 15:08:00
--  专业报表存为PDF格式文件,图片不显示
生成专业报表,在预览时显示图片,存为PDF格式时图片不显示,请教解决办法。
--  作者:狐狸爸爸
--  发布时间: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
--  发布时间:2012/8/9 16:57:00
--  
按照你的程序是可以显示图片
--  作者:zunwoun
--  发布时间: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 = "发票编号"
        rt.Cells(i*j+1, 1).RenderObject = rx1 \'将文本对象放置在单元格中
       
        Dim rx2 As New prt.RenderText \'定义一个文本对象
        rx2.Text = dr("发票号码")
        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
--  发布时间:2012/8/9 17:01:00
--  

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

 


--  作者:狐狸爸爸
--  发布时间:2012/8/9 17:27:00
--  

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

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


--  作者:zunwoun
--  发布时间:2012/8/9 17:53:00
--  

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