如何使用opentbs在docx中插入条件空格(仅当某些字段不为空时)

时间:2014-03-25 01:04:56

标签: php docx opentbs tinybutstrong

我使用opentbs以.docx格式生成报告,从用户输入到表单的数据,并希望能够有条件地在字段之间添加空格。以下是该问题的范例示例:用户必须输入街道地址(地址1),但地址字段(分别为business和address2)之前和之后的字段是可选的。有没有办法在模板中设置合并字段,这样,如果用户将某些内容放入业务字段,则合并产生的文档将具有业务字段的值,后跟空格,但如果用户离开该字段为空白,合并产生的文档将不具有字段或空格?我可以看到实现此目的的两种可能方法:1。使用独立的合并字段,仅在字段" business"不是空白;或2.使用模板中的合并字段打印字段的值和空格,但仅当字段不为空时。

这是我对这两种解决方案的伪代码: 1. [onshow.business] [onshow; if [business]!= blank;然后' &#39 ;;别的''] [onshow.address1] 2. [onshow.business AND' '] [onshow.address1]

看起来这一定是可能的,但我还没有找到办法将伪代码转换成我的docx中真正的,有效的合并字段。模板。我已经搜索了这个论坛和tbs论坛上的所有条目,以及文档,但问题没有得到正确提出,我尝试过的东西都没有用。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

如果不是business,则会在''之后插入一个不间断的空格:

[onshow.business; if [val] != ''; then [val] ]

您可能遇到的问题是Word如何表示空格......我建议您首先插入一个问题较少的字符,以确保您的代码正常工作(例如^a ),然后努力寻找合适的字符/参数组合,使空间工作。

当您开始考虑时,我会尝试\shttp://www.tinybutstrong.com/forum.php?thr=3234 然后我会查看xml:space="preserve"http://www.tinybutstrong.com/forum.php?thr=3263

它似乎显示在<w:t>标记上,如下所示:<w:t xml:space="preserve">所以您可以尝试以下内容:

PHP:

$f = 'preserve';

TEMPLATE:

[onshow.business; if [val] != ''; then '[val] ';][onshow.p;att='xml:space']

处理att可能有更好的方法,但这至少可以让你开始。

答案 1 :(得分:4)

万一有人想要它,根据Sarah和Skrol29的答案,这就是我最终为我的文档整理的内容:

PHP:
没有变化

TEMPLATE:

[onshow.firstName] [onshow.lastName],[onshow.businessName; if [val] != '; then '     [val],'] [onshow.address1][onshow.address2; if [val] != '' then ' [val]'], [onshow.city], [onshow.state] [onshow.zip]; [onshow.phone]; [onshow.email]

合并的DOCX: businessName和address2留空:

Joe Bloggs, 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com

填写了businessName,但地址2留空:

Joe Bloggs, Smith Co., 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com

如果businessName留空,但地址2填写:

Joe Bloggs, 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; test@email.com

同时使用:

Joe Bloggs, Smith Co., 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; test@email.com

答案 2 :(得分:2)

以下两个解决方案假定[onshow.business][onshow.adress1]位于同一个Ms Word段落中。

你必须:

1)具有与字段不同的文本格式的字段[onshow.business]之后的空格。例如,您可以将空格字符的字体边增加1。

注意:Word会根据文本上应用的格式将文本拆分为多个片段。每个代码段都在其自己的<w:r>元素中定义。

2)然后在字段[onshow.business]上添加参数磁铁,以便在字段为空时删除空格。

示例:

Hello [onload.business;magnet=w:r+w:r] [onload.address1]

与显示代码段分隔的|相同的示例:

Hello |[onload.business;magnet=w:r+w:r]| |[onload.address1]

请假设某个字段[onshow.business]必须位于其前面的文本的单独片段中,否则它将删除之前的文本,方法与删除该空格的方式相同。