2

如果给定足够大的日期范围,我有一份报告可以生成超过 30,000 条记录。从 HTML 方面来看,这么大的结果集不是问题,因为我实现了一个分页系统,在给定时间将可查看结果限制为 100。

一旦用户按下“获取 PDF”按钮,我的真正问题就会出现。发生这种情况时,我基本上重新运行打印数据的报告部分(报告本身的结果存储在“保存”表中,因此无需重新运行数据收集逻辑),并存储结果产生一个名为 的变量$html。请记住,此变量现在包含 30,000 条数据记录以及在 PDF 上正确格式化所需的 HTML。创建此 HTML 字符串后,我将其传递给 TCPDF 以尝试为用户生成 PDF 文件。然而,它并没有生成 PDF 文件,而是在没有错误消息(“正在生成 PDf...”)对话框中消失,系统就像您从未要求它做任何事情一样。

通过测试,我发现问题出在$html传入的变量的大小。如果3K以下的报告记录,它可以正常工作。如果结束了,将打印报告的 HTML 端,但不会打印 PDF。

有用的信息

  • PHP 5.3
  • 用于 PDF 生成的 TCPDF(也尝试过 PS2PDF)
  • 脚本内存限制:500 MB

在生成这种大小的 PDF 时,你们将如何处理这种规模的数据?

4

4 回答 4

1

您使用的是 writeHTML 方法吗?

我在这里查看了性能建议:http ://www.tcpdf.org/performances.php

它说“将大的 HTML 块分割成更小的部分;”。

我发现如果我的 HTML 块超过 20,000 个字符,则生成 PDF 需要 2 分钟以上。

我只是将我的 html 拆分为块,并为每个块调用 writeHTML,它得到了显着改善。一个在 2 分钟之前不会生成的文件现在需要 16 秒。

于 2012-01-26T16:48:53.073 回答
1

以下是我解决此问题的方法:我注意到我在 HTML 输出中的一些字符串存在一些轻微的编码问题 - 我在查询数据库时对这些特定字符串运行了htmlentities并解决了问题。

不知道这是否是导致您的问题的原因,但我的经验非常相似 - 当我试图输出一个大尺寸的 HTML 表格时,大约有 80.000 行,TCPDF 会显示页眉但没有表格 -有关的。对于不同的数据集和不同的表结构,这种行为是相同的。

经过多次尝试后,我开始添加自己的分页 - 每 15 个表格行,我会打破页面并在下一页添加一个新表格。那时我注意到每隔一段时间我会在很多完整和正确的页面之间得到空白页。那时我意识到那些特定的数据子集一定有问题,并发现了编码问题。可能是您遇到了类似的情况,而 TCPDF 没有明确说明您的问题是什么。

于 2012-01-10T13:32:02.967 回答
0

我会将 PDF 分成几部分,就像分页一样。

1) 在每个分页的 HTML 页面上都有“获取 PDF”按钮,并且只允许从该 HTML 页面下载记录。

2) 限制可以下载的最大记录数。如果达到最大限制,则拆分 PDF 并让用户下载多个 PDF。

于 2010-08-26T16:25:08.123 回答
0

TCPDF 似乎是 PHP 中 PDF 生成的本机实现。使用PDFlib之类的编译库或htmldoc 之类的命令行应用程序可能会获得更好的性能。后者最有可能生成大型 PDF。

另外,您是否将输出 PDF 分成多个页面?即,TCPDF 是否知道将单个 HTML 文档剪切成多个页面,或者您是否生成多个 HTML 文件以将其组合成单个 PDF 文档?这也可能有所帮助。

于 2010-08-26T16:33:59.377 回答