adolfgzb 发表于 2021-2-7 16:33:03

SectionReport多票印刷AddRange处理页数多时中间有空白页

本帖最后由 adolfgzb 于 2021-2-7 16:48 编辑

                frmShowView.Viewer1.Document = rpt.Document
                rpt.Document.Pages.AddRange(rpt1.Document.Pages())
                rpt.Document.Pages.AddRange(rpt2.Document.Pages())
程序是通过AddRange处理把几张票加在一起预览、印刷。
数据量小的时候没有问题,数据量大的时候,比如需要add进去的rpt1或者rpt2有六七千页的时候,中间就会不时出现空白页。

单独印刷rpt1或者rpt2的时候,没有空白页,数据都是正常显示的。

请问这是什么原因啊?是工具问题吗?

补充一点:多运行几次,空白页显示的位置还是不同的。不如第一次第100页~103页显示空白,第二次这几页又正常显示,106页~120页显示空白。
感觉这个也有一定的随机性,比较奇怪

Lenka.Guo 发表于 2021-2-7 16:54:23

您好

您用的 AR哪个版本呢?我们需要测试重现这个问题才能判断是什么原因呢。

adolfgzb 发表于 2021-2-7 16:57:58

Lenka.Guo 发表于 2021-2-7 16:54
您好

您用的 AR哪个版本呢?我们需要测试重现这个问题才能判断是什么原因呢。
现在用的是AR7.6
版本号v7.6.8201.1

Lenka.Guo 发表于 2021-2-7 17:49:11

您好,
因为您可能使用的是日文版的V7比较早的版本了,这边没有环境,我这边在AR15 测试没有重现该问题,
搜索了Case库,有V7版本的提过类似的Case可能是您这边设置了 CacheToDisk为True导致的空白页,可以尝试将该属性设为False或者移除相关代码


SectionReport1 rpt1 = new SectionReport1();
            SectionReport2 rpt2 = new SectionReport2();
            rpt1.Document.CacheToDisk = true;
            rpt2.Document.CacheToDisk = true;
            rpt1.Run();
            rpt2.Run();
            rpt1.Document.Pages.AddRange(rpt2.Document.Pages);
            viewer1.Document = rpt1.Document;
            viewer1.CurrentPage = 308;

adolfgzb 发表于 2021-2-8 09:32:06

Lenka.Guo 发表于 2021-2-7 17:49
您好,
因为您可能使用的是日文版的V7比较早的版本了,这边没有环境,我这边在AR15 测试没有重现该问题,
...

你好,设置rpt2.Document.CacheToDisk = True 是为了避免保存PDF大小是0K,保存不了。
这样改回去的话,这个PDF保存问题可以解决吗?

adolfgzb 发表于 2021-2-8 09:45:48

现在要解决的问题就是大数据量的时候,report预览或者保存时会有各种问题,比如run的时候内存直接溢出,保存PDF时直接0K保存不了,还有这个帖子问的空白页的问题。

关于report的性能处理,有没有什么建议啊?

Lenka.Guo 发表于 2021-2-8 09:55:53

您好
建议升级版本,因为这些问题是在较早的AR7中出现的,已经在新版中修复了。
关于空白页的Workaround:
1) 不设置rpt2 的 CacheToDisk .2) 使用 Clone方法,来复制 Pages(Page) to rpt1.rpt1.Document.Pages.AddRange(rpt2.Document.Pages.Clone() as PagesCollection);

adolfgzb 发表于 2021-2-8 11:11:27

你好,我试了把CacheToDisk去掉,大数据的时候run会直接内存溢出,我再试下优化看看吧。

Lenka.Guo 发表于 2021-2-8 12:09:20

好的:loap1:您在尝试下。

adolfgzb 发表于 2021-2-8 13:19:55

上面的办法不行,AddRange的时候用clone内容,会导致内存溢出System.OutOfMemoryException
页: [1] 2
查看完整版本: SectionReport多票印刷AddRange处理页数多时中间有空白页