PDF生成无法通过WorkBench打印大量PDF PDF-generation-fails-to-print-a-large-number-of-PDFs-via-WorkBench

问题 issue

当客户通过通过WorkBench实施的服务生成大量PDF时。 服务因内存不足而失败。 错误显示为:

ALC-OUT-002-013: XMLFormFactory, PAexecute failure: "0: Out of Memory"

这是因为在Windows上,打印请求中的最大页数限制为大约1000页。 当生成打印输出时,模板和数据需要加载到内存中,并且生成的布局构建在内存中。 这意味着最终输出的大小存在限制。 生成打印输出的进程是32位任务,这意味着它在Windows 上限制为2 GB的RAM。

应用到 applies-to

此解决方案适用于x86_win32 XMLFM的AEM Forms

解决方案 solution

影响内存使用率的最大因素是表单上的数据量。 但是,在形状设计中存在其它因素,它们对内存使用的影响较小。 当您意识到这些因素时,可以设计一个表单以获得更大的打印输出。 以下部分按优先级顺序指示影响内存占用空间的因素:

影响因子 impact-factor

  1. 选择子表单 — 选择子表单集是子表单集对象的变体,它允许您使用条件语句来自定义集合中特定子表单的显示。
  2. 使用静态文本代替字幕 — 几乎每个字段内都提供字幕,用户应使用它,而不是使用额外的静态文本作为字幕。
  3. 尽可能使用​ RTF格式

平均

设计表单模板时,为帮助提高内存使用率,应考虑其他因素:

  1. 避免使用静态文本标记字段。 请改用文本字段中的标题。
  2. 不要过度使用矩形、线条、对象和表格。
  3. 如果可能,请避免使用RichText和Choice子表单。
  4. 避免过度使用子表单和嵌套子表单。

数据大小限制 data-size-limitations

由于受到最大进程内存的限制,进程所消耗的内存不仅取决于数据文件的大小。 它与表单设计有着非常密切的关系,在某种程度上也与表单中合并的实际数据量有着密切的关系。

如果表单有许多小节点,但数据很小,则该过程会消耗更多的内存(因此内存耗尽的速度会更快),而不是具有更少节点(即使)且数据较大的表单。

阅读以下附录以了解更多信息,其中测试结果基于打印表单(无标签PDF)。 使用标记的PDF进程内存需求增加。 它还取决于表单中的字段数 — 大约流程内存需求是未标记PDF的1.5倍多。

交互式Forms interactive-forms

由于交互字段再次呈现,因此交互式表单占用的内存将多于打印Forms 。 在执行的测试中,与打印表单相比,内存消耗增加了约1.5倍,这些表单是静态交互表单。

图像格式 image-formats

Adobe不推荐任何特定的图像格式。 但是,最好是让图像更小,例如PNG(可移植网络图形)。 也不建议使用大小为数百MB的高分辨率图像。 此外,不建议使用压缩图像,因为解压缩后压缩图像的大小会扩展到数百MB的数据。

附录 appendix

表示例

下面显示了表的不同变量,这些变量显示简单表和复杂表的渲染页数与数据大小。

  1. 带有单列的表,其中生成了5000页PDF,数据文件大小为24 MB和30-K记录。

    table_single_column

  2. 一个有许多小列的表,其中生成了800页PDF,数据文件大小为4.6 MB,记录为20-K。
    table_many_small_columns

  3. 具有许多小列的表,但由于使用了较大的xmlTag名称,数据文件较大。
    此处,所有内容与上一个相同,但xml标记名称已变大(以便数据文件大小增加而不增加实际有效数据),最终结果(上限)几乎相同。 数据文件大小从4.6 MB增加到44.6 MB。 此处生成的PDF为800页,数据文件大小为44.6 MB,记录为20-K。

    table_bigger_xml_tagname

因此,很难对数据文件大小设置一般的上限。 每个表单都是唯一的,因此内存消耗会因表单而异。

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2