水晶数码 发表于 2024-8-1 14:34:39

批量生成PDF问题

本帖最后由 水晶数码 于 2024-8-2 16:23 编辑

1,列表有复选框,选中进行批量打印

需要静默生成PDF(现在是预览才能生成PDF),现在的模板是根据数据源生成的数据集进行绑定的。生成的PDF中的数据要和列表中勾选的数据对应起来(目前提供的例子是单个的,并且数据是写死的)

2,目前单条数据,预览生成的PDF是乱码

最好能提供Demo


Felix.Li 发表于 2024-8-1 14:34:40

那这样,您方便发一下您的报表Demo吗,我们测试一下吧。您的导出方法应该就是循环调用pageReport.Load() 然后导出的吧。这个我们用您的报表测试一下吧,不确定是不是设置问题还是bug

Felix.Li 发表于 2024-8-1 16:39:41

您好,我看了一下,全部用报表去做其实比较麻烦,包括报表控制数据集,打印不同的。
而且因为浏览器的限制,其实是没有办法完全实现静默打印的,因为浏览器只要打印,就会弹出浏览器的弹出框,这个因为本身就是前端组件的限制,所以如果想做静默打印,必须要借助服务端的打印程序。
其次,关于您说的这个,最好的实现其实是这样的,您做一批报表,然后还是通过传递数据不同,去打开不同报表。然后咱们自己在组件外面写一个复选框。复选框就是控制给报表传不同数据,加载不同报表,然后加载的话,报表是可以实现不预览加载的:
报表静默加载和打印可以参考这个帖子:
https://gcdn.grapecity.com.cn/showtopic-157785-1-1.html


2.乱码应该就是咱们没有注册字体文件,咱们按照我们文档注册一下字体就可以:
https://demo.grapecity.com.cn/activereportsjs/docs/DeveloperGuide/ActiveReportsJSDesignerComponent/Register-Fonts

水晶数码 发表于 2024-8-2 16:23:15

Felix.Li 发表于 2024-8-1 16:39
您好,我看了一下,全部用报表去做其实比较麻烦,包括报表控制数据集,打印不同的。
而且因为浏览器的限制 ...

乱码已经看过了,但是还是不行。
无法正常请求字体文件,json文件正常:
正常字体:
目前请求的字体:为项目的index.html(相对绝对路径引入都试过)

水晶数码 发表于 2024-8-2 16:45:52

Felix.Li 发表于 2024-8-1 16:39
您好,我看了一下,全部用报表去做其实比较麻烦,包括报表控制数据集,打印不同的。
而且因为浏览器的限制 ...

复选框就是控制给报表传不同数据,加载不同报表

能具体说说怎么传参吗

Felix.Li 发表于 2024-8-2 18:13:40


我这里有个Demo项目,里面有注册字体的:


至于复选框传参,您不需要给我们传参,我的意思是这样。
咱们自己写一个复选框,然后复选框里面比如你选 report1,report2。
然后这两个对应两个不同报表。然后我们代码利用这个教程:
https://gcdn.grapecity.com.cn/showtopic-157785-1-1.html
循坏调用,进行report.load然后循环加载报表,循环导出PDF给静默打印程序

水晶数码 发表于 2024-8-5 10:28:33

Felix.Li 发表于 2024-8-2 18:13
我这里有个Demo项目,里面有注册字体的:




乱码问题已经解决

现在是批量打印传参问题,复选框选中之后,同一个模板也是要传不同的参数过去的,现在是不知道怎么把动态的数据传给模板

Felix.Li 发表于 2024-8-5 12:26:40

现在不太确定您说的动态数据是报表参数还是数据源。

都说一下,如果您要动态传数据源的话,可以参考这个:
https://demo.grapecity.com.cn/activereportsjs/demos/features/viewer-runtime-data-binding/purejs

同样,其实我们知道报表参数的情况下,其实也可以改load的json对象,去添加参数。
或者参数您可以参考这个:
pageReport
      .load("report/11.rdlx-json")
      .then(function () {
      let par = Object.keys(pageReport._parameters);
      for (let i = 0; i < par.length; i++) {
          pageReport._parameters].values = pageReport._parameters].descriptor.defaultValue
      }

      return pageReport.run();
      })pageReport._parameters].values
就是给参数赋值,par是参数的名称,我们根据不同参数名称,给参数赋值即可.传递时一个数组,类似:
pageReport._parameters].values = ["222"]


水晶数码 发表于 2024-8-5 17:24:20

Felix.Li 发表于 2024-8-5 12:26
现在不太确定您说的动态数据是报表参数还是数据源。

都说一下,如果您要动态传数据源的话,可以参考这个 ...

你好,是把这个data传给后端吗

Felix.Li 发表于 2024-8-5 17:41:00

这个看情况是一个PDF流,应该是pageReport导出后的PDF流。这个咱们可以自己处理的。
无论是直接调用对象的download ,会直接下载。
还是data pdf流给别的地方,在别的地方处理也是可以的
页: [1] 2
查看完整版本: 批量生成PDF问题