此主题相关图片如下:11111.png
报表设了两栏,导出PDF时,如果一张一张导出,是没有问题,栏宽一样,如果一次导出很多张,就会出现栏宽不一样,有时还会挤在一起的现象,如何处理这个问题?
以下是代码:
With Tables(e.Form.name & "_table1")
Dim i As Integer
Dim ii As Integer
Dim i1 As Integer = .TopRow '最上行位置
Dim i2 As Integer = .BottomRow '最末行位置
Dim s As Integer
s = i2 - i1 +1 '选择的行数
'定义报表
Dim doc As New PrintDoc '定义一个报表
doc.PageSetting.PaperKind = 9 '纸张类型改为A4
doc.PageSetting.Landscape = True '横向打印
Doc.PageSetting.LeftMargin = 25 '设置左边距
Doc.PageSetting.RightMargin = 20 '设置右边距
Doc.PageSetting.TopMargin = 20 '设置上边距
Doc.PageSetting.BottomMargin = 20 '设置下边距
Dim ra As prt.RenderEmpty '定一个空对象
Dim rt As New prt.RenderTable() '定义一个表格对象
Dim rm As New prt.RenderImage() '定义一个图片对象
Dim rx As New prt.RenderText '创建一个文本
Dim Names As New List(Of Integer)
For i = i1 To i2 '将选择的最上一行位置数减掉就等于0
'强制换页,必须放在这里,如果放在判断集合之前,会出现排两个后有空白页
ra = new prt.RenderEmpty '定义一个新的空对象
ra.BreakBefore = prt.BreakEnum.Page '打印前换页
doc.Body.Children.Add(ra) '加入到报表中
'分栏
Doc.Columns.Add() '增加第一栏
Doc.Columns.Add() '增加第二栏
Dim f1 As Integer
f1 = 242 * .Rows(i)("报表照片宽")/(.Rows(i)("报表照片宽") + .Rows(i+1)("报表照片宽")) '第一列宽
Doc.Columns(0).Width = f1 '第一栏栏宽
Doc.Columns(0).Spacing = 7 '第一栏右侧间距
Doc.Columns(1).Width = 242-f1 '第二栏栏宽
'MessageBox.Show(Doc.Columns(0).Width)
'MessageBox.Show(Doc.Columns(1).Width)
'表格
rt = New prt.RenderTable() '定义一个表格对象
'rt.Style.GridLines.All = New prt.Linedef(Color.Transparent) '将表格的颜色设为无色
'rt.Style.GridLines.All = New prt.Linedef(Color.red) '将表格的颜色设为深灰色,Gainsboro
rt.Style.GridLines.All = New prt.Linedef(Color.Gainsboro) '将表格的颜色设为深灰色,Gainsboro
rt.Width = f1
rt.height = 170
'If f1 < 138 Then
'rt.rows(0).Height = 138
'Else
If CInt(f1*100/.Rows(i)("报表照片宽")) +1 > 138 Then
rt.rows(0).Height = 138
Else
rt.rows(0).Height = CInt(f1*100/.Rows(i)("报表照片宽")) +1 '第一行高度
End If
MessageBox.Show(rt.rows(0).Height)
'rt.rows(0).Height = Math.Round(250*100/.Rows(i)("报表照片宽"),0) '第一行高度,四舍五入错误
rt.Rows(0).Style.Borders.All = New prt.LineDef("0.25mm", Color.Gainsboro)
rt.rows(1).Height = "auto" '第二行高度
doc.Body.Children.Add(rt) '将表格对象加入到报表中
'图片
rm = New prt.RenderImage() '定义一个图片对象
Dim txt As String
txt = .Rows(i)("路径")
rm.Image = GetImage(txt) '请改为实际的图标名称和路径
rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '图片水平居中
rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Top '图片垂直居中
rm.Style.ImageAlign.StretchHorz = True '禁止水平方向扩展图片
rm.Style.ImageAlign.StretchVert = True '禁止垂直方向扩展图片
rt.Cells(0,0).RenderObject = rm '将单元格内容设置为图片对象rm
'题名+档案号
rx = New prt.RenderText '创建一个文本
rx.Text = vbcrlf & .Rows(i)("题名") & vbcrlf & vbcrlf & .Rows(i)("档案号") '设置文本对象的内容
rx.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx.Style.LineSpacing = 120 '1.3倍行距
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rt.BreakAfter = prt.BreakEnum.Column '*****打印之后另起一栏
rt.Cells(1,0).RenderObject = rx
'表格
rt = New prt.RenderTable() '定义一个表格对象
'rt.Style.GridLines.All = New prt.Linedef(Color.Transparent) '将表格的颜色设为无色
'rt.Style.GridLines.All = New prt.Linedef(Color.red) '将表格的颜色设为深灰色
rt.Style.GridLines.All = New prt.Linedef(Color.Gainsboro) '将表格的颜色设为深灰色,Gainsboro
rt.Width = 242-f1
rt.height = 170
'If 242-f1 < 138 Then
'rt.rows(0).Height = 138
'Else
'rt.rows(0).Height = CInt((242-f1)*100/.Rows(i+1)("报表照片宽")) +1 '第一行高度
'End If
If CInt((242-f1)*100/.Rows(i+1)("报表照片宽")) +1 > 138 Then
rt.rows(0).Height = 138
Else
rt.rows(0).Height = CInt((242-f1)*100/.Rows(i+1)("报表照片宽")) +1 '第一行高度
End If
rt.rows(1).Height = "auto" '第二行高度
rt.Rows(0).Style.Borders.All = New prt.LineDef("0.25mm", Color.Gainsboro)
doc.Body.Children.Add(rt) '将表格对象加入到报表中
'图片2
rm = New prt.RenderImage() '定义一个图片对象
Dim txt2 As String
txt2 = .Rows(i+1)("路径")
rm.Image = GetImage(txt2) '请改为实际的图标名称和路径
rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '图片水平居中
rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Top '图片垂直居中
rm.Style.ImageAlign.StretchHorz = True '禁止水平方向扩展图片
rm.Style.ImageAlign.StretchVert = True '禁止垂直方向扩展图片
rt.Cells(0,0).RenderObject = rm '将单元格内容设置为图片对象rm
'题名+档案号2
rx = New prt.RenderText '创建一个文本
rx.Text = vbcrlf & .Rows(i+1)("题名") & vbcrlf & vbcrlf & .Rows(i+1)("档案号") '设置文本对象的内容
rx.Style.Font = New Font("宋体", 15, FontStyle.Bold) '设置字体如果不设置字体,会出现导出PDF乱码
rx.Style.LineSpacing = 120 '1.3倍行距
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Left '水平居中
rx.Style.TextAlignVert = prt.AlignVertEnum.Top '垂直居下
rt.Cells(1,0).RenderObject = rx
Next
'Doc.Preview() '预览报表
Dim dlg As New FolderBrowserDialog '保存目录
'dlg.Filter = "PDF文件|*.pdf"
If dlg.ShowDialog = DialogResult.Ok Then
Dim fl As String = dlg.SelectedPath & "\照片目录.pdf"
doc.SavePDF(fl) '保存为PDF文件
Dim Proc As New Process '打开PDF文件
Proc.File = fl
Proc.Start()
End If
End With