以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 专业报表中的图片问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194911) |
-- 作者:keli0917 -- 发布时间:2025/2/5 16:44:00 -- 专业报表中的图片问题 Dim filterpzh As String Dim zzlx As String Dim cmb As WinForm.ComboBox = e.Form.Controls("ComboBox1") Dim doc As New PrintDoc \'定义一个报表 Dim cs As List(Of String) = Tables(vars("pzsybtb")).DataTable.GetValues("号码", filterpzh, "号码") For Each c As String In cs Dim r1 As Integer=0 Dim drs As List(Of DataRow) drs = DataTables(vars("pzsybtb")).Select("[号码] = " & CInt(c) & " And 经营单位 = \'"& _jydw &"\'","分录序号") Dim n0 As Integer n0= drs.count Mod 6 \'计算余数 Dim yecount As Integer yecount =drs.count \\6 If n0 > 0 Then yecount =drs.count \\6 + 1 Else End If For ye As Integer = 1 To yecount r1=r1+6 Dim sn As Integer = ye* 6 Dim k As Integer = (ye -1) *6 Dim ra As New prt.RenderArea \'定义一个容器 ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never \'禁止容器因为分页而被垂直分割 Dim rt As New prt.RenderTable() \'定义一个表格对象 Dim rt1 As New prt.RenderTable() \'定义一个表格对象 \' Dim rt2 As New prt.RenderTable \'定义一个表格对象 Dim rx As New prt.RenderText \'定义一个文本对象 rx.text = drs(k)("凭证字") rx.Style.FontBold = True \'字体加粗 rx.Style.FontSize = 16 \'大体大小为16磅 rx.Style.F rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'水平居中排列 rx.Style.Spacing.Bottom = 1 \'和下面的对象(表格)距离3毫米 ra.Children.Add(rx) \'加入到容器中 Dim Sum,sum1 As Double Dim sum2 As Integer Sum = Tables(vars("pzsybtb")).Compute("Sum(借方金额)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = \'"& _jydw &"\'") Sum1 = Tables(vars("pzsybtb")).Compute("Sum(贷方金额)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = \'"& _jydw &"\'") Sum2 = Tables(vars("pzsybtb")).Compute("Sum(附件数)","[顺序号] = " & drs(k)("顺序号") & "And 经营单位 = \'"& _jydw &"\'") rt.Cells(0,0).Text = "摘要" rt.Cells(0,1).Text = "科目名称" rt.Cells(0,2).Text = "币别" rt.Cells(0,3).Text = "原币金额" rt.Cells(0,4).Text = "汇率" rt.Cells(0,5).Text = "借方金额" rt.Cells(0,6).Text = "贷方金额" If ye = yecount Then rt.Cells(7,0).Text = "合 计:" rt.Cells(7,1).Text =CUMoney(sum) rt.Cells(7,1).SpanCols = 4 rt.Cells(7,5).Text = sum rt.Cells(7,6).Text = sum1 Else rt.Cells(7,0).Text = "转下页" End If rt1.Cells(1,0).Text = "" rt1.Cells(1,6).Text = drs(k)("号码") & " ("& ye &"/" & yecount & ")" rt1.Cells(1,3).Text = "" rt.Cells(8,1).Text = "主管: " rt.Cells(8,5).Text = "制单: " rt1.Rows.Count = 2 \'设置总行数 rt1.Cols.Count = 7 \'设置总列数 rt.Rows(0).Style.FontBold = True \'字体加粗 rt.Rows(7).Style.FontBold = True For i As Integer = 0 To 7 rt.rows(i).Style.GridLines.All = New prt.Linedef(Color.Gray) \'灰色网格线 Next rt.Rows.Count = 9 \'设置总行数 rt.Cols.Count = 7 \'设置总列数 rt.Height = 120 \'设置表格的高度为120毫米 rt1.rows(0).Height= 5 rt1.rows(1).Height= 5 rt.rows(0).Height= 10 rt.rows(7).Height= 8 rt.rows(8).Height= 8 rt.Cols(0).Width =40 rt.Cols(1).Width =60 rt.Cols(2).Width =10 rt.Cols(4).Width =12 Dim m As Integer =1 For j As Integer = (ye -1) *6 To drs.count - 1 If m<= 6 Then rt.Cells(m,0).Text = drs(j)("摘要") rt.Cells(m,1).Text = drs(j)("科目名称") rt.Cells(m,2).Text = drs(j)("币别") rt.Cells(m,5).Text = drs(j)("借方金额") rt.Cells(m,6).Text = drs(j)("贷方金额") m=m+1 End If Next rt1.Style.Spacing.Top = 1 rt1.Cells(1,1).Style.TextAlignHorz=prt.AlignHorzEnum.Center rt1.Cells(1,1).Style.TextAlignVert = prt.AlignVertEnum.Top rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'垂直居中 rt.Style.Spacing.Bottom = 20 \'和下一个资料卡的距离是5毫米 rt.Style.F rt1.Style.F rt.Style.FontSize = 9 \'字体大小为10磅 ra.Children.Add(rt1) \'加入到容器中 ra.Children.Add(rt) \'加入到容器中 If cmb.value = "自定义" Then doc.PageSetting.Width = val(e.Form.Controls("TextBox3").text) \'纸张宽度为100毫米 doc.PageSetting.Height = val(e.Form.Controls("TextBox4").text) \'纸张高度为120毫米 If val(e.Form.Controls("TextBox3").text) > val(e.Form.Controls("TextBox4").text) Then doc.AutoRotate = False \'如果纸张的宽度超过高度,要加上这行代码 End If Else doc.PageSetting.PaperKind = zzlx \'纸张类型改为a4 End If Doc.PageSetting.TopMargin = 15 Doc.PageSetting.BottomMargin = 5 Doc.PageSetting.LeftMargin = 10 \'设置左边距 Doc.PageSetting.RightMargin = 10 \'设置右边距 doc.Body.Children.Add(ra) Next \'开始加入图片 If 1= 1 Then Dim gr As DataRow gr = DataTables("GLVchFileAddress").Find("凭证号 = \'" & drs(0)("凭证号") & "\'") If gr IsNot Nothing Then Dim lst As New List(of String) lst = gr.Lines("FFileAddress") For p As Integer = 0 To lst.count -1 Dim rm As New prt.RenderImage \'定义一个图片对象 rm.Width = "Parent.Width" \'对象宽度为页面的90% ,190 If cmb.value = "A4" Then rm.Height = "50%Parent.High" \'"Auto" \'高度由图片大小自动决定130 ElseIf cmb.value = "自定义" Then rm.Height = "Parent.High" \'"Auto" \'高度由图片大小自动决定 End If rm.Image = GetImage(lst(p)) \'设置图片 rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center \'居中显示 doc.Body.Children.Add(rm) \'将图片对象加入报表 Next End If End If Next Doc.Preview() \'预览报表 图片有时候无法生成,请教一下,是不是代码问题?还是缓存问题? 软件关掉,重新运行后又可以生成图片。
|
-- 作者:有点蓝 -- 发布时间:2025/2/5 16:52:00 -- 应该不是代码问题。预览后没有图片的时候,看看内存占有率是多少。图片分辨率是不是过大? 另外页面设置的代码应该放到循环外部,设置一次即可,没有必要放到循环里面
|
-- 作者:keli0917 -- 发布时间:2025/2/5 17:31:00 -- 关掉FOX,内存占用34%,因为打印机在打印。 打开专业报表, 1,生成100页,其中50页是带图片(正常显示)的,内存41%。 2,生成100页,其中50页是带图片(图片不能显示)的,内存也是41%。 3,100页都不带图片,内存36%。
上一次100页不能显示图片的话,改成1-10页,有时候能显示图片,有时候不能显示图片。 |
-- 作者:keli0917 -- 发布时间:2025/2/5 17:32:00 -- 会不会跟我的系统盘空间太少了有关系?我的系统盘可用空间只有6G了。 |
-- 作者:keli0917 -- 发布时间:2025/2/5 17:33:00 -- 图片分辨率300 |
-- 作者:keli0917 -- 发布时间:2025/2/5 18:04:00 -- 而且有时候是中间会有几页图片不显示。。。我的图片尺寸大小都是一样的。图片都在本地文件夹。 有时候,下次预览时,上次打不开的图片又显示了。
[此贴子已经被作者于2025/2/5 18:17:45编辑过]
|
-- 作者:keli0917 -- 发布时间:2025/2/5 18:31:00 -- 我在 lst = gr.Lines("FFileAddress") 后面加上图片数量统计,ctnum =ctnum + lst.count ,图片统计出来的数量是准确的。但是预览50页的时候能正常显示,预览的页数越多,就只有前面几页显示图片了 |
-- 作者:有点蓝 -- 发布时间:2025/2/6 8:42:00 -- Foxtable是32位程序,大概能用到1G左右的内存,打印的时候如果Foxtable占用接近900M应该是可用内存不足了。 |
-- 作者:有点蓝 -- 发布时间:2025/2/6 8:43:00 -- 另外需要直接打印,如:Doc.Print(),不能在预览界面里点击打印 |
-- 作者:keli0917 -- 发布时间:2025/2/6 16:33:00 -- 如何解决内存不足的问题?只能每次少生成几页吗? |