【问题标题】:Long text input from user and PDF generation来自用户的长文本输入和 PDF 生成
【发布时间】:2009-10-29 22:11:23
【问题描述】:
我已经构建了一个 Web 应用程序,它可以被视为一个过于复杂的应用程序表单。有一堆具有给定字符限制的文本区域。表单提交后会发生各种事情,其中之一就是生成 PDF。
从 DB 中查询文本并插入在 iReports 中创建的 PDF 模板中。这很好用,但主要的痛点是文本溢出。
最大字符数是根据“平均”文本设置的。但有时人们更喜欢使用大写字母或添加大量换行符来格式化他们的文本。然后这些会导致用户的文本溢出 PDF 中给出的空间。不幸的是,PDF 文档必须看起来像一个真实的申请表,所以我不能允许无限的空间。
你用什么方法来解决这个问题?
- 清除/限制用户输入?
- 根据字体度量计算文本的空间要求?
- 提供 PDF 的预览? (太糟糕的用户在提交后不允许更改他们的输入......)
【问题讨论】:
标签:
java
pdf-generation
jasper-reports
validation
ireport
【解决方案1】:
理想情况下,根据指标计算需求。我不知道 iReports 是如何处理文本的,但是使用 iText,它会自行布置所有内容,您只需将数据呈现为流式文档,因此我们不必担心文本溢出。
但是,iReport 可能不支持,或者您可能需要使 PDF 布局适合特定范围。我会尝试清理输入(即:如果都是大写,小写/句子大小写/正确大小写),去除额外的空格。如果清理输入不能可靠地完成,或者人们仍然无法通过,我也会限制它。
作为最后的手段,我会提供 PDF 供用户授权。确实,不应该让用户做更多的工作,而且他们无论如何也不会这样做。
【解决方案2】:
您自己建议的解决问题的方法都很好。可能要回答的最重要的问题是,当字段中显示的数据不适合时,您的 PDF 应该是什么样子?您是否需要其他任何事情的“完整答案”?当您知道这些问题的答案时,您的选择就会减少。
例如,如果一个字段必须限制为一页的 1/2,而用户有时输入的文本超过一页的 1/2,您可以
1)限制用户输入 - 在提交时计算大小(使用你所说的字体度量)并拒绝提交直到更正。这假设您可以合法地强制用户减少他们的数据输入。
2) 接受用户输入并在此报告的显示中截断。一些系统使用“...”表示数据已被截断,并且可以提供超链接(甚至在 PDF 中)以获取更多信息。
提供预览效果非常好,但前提是用户善于检查和纠正,并且您的系统可以处理由此产生的额外负载。
【解决方案3】:
您是否可以控制生成 PDF 时使用的字体?如果是这样,我会在 Monospace 系列中寻找一种字体。这将为给定数量的字符提供一致的长度,而不管标点、大写等。