Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用opentbs在docx中插入条件空格(仅当某些字段不是空时)_Php_Docx_Opentbs_Tinybutstrong - Fatal编程技术网

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

Php 如何使用opentbs在docx中插入条件空格(仅当某些字段不是空时),php,docx,opentbs,tinybutstrong,Php,Docx,Opentbs,Tinybutstrong,我使用opentbs从用户输入到表单中的数据生成.docx格式的报告,并且希望能够有条件地在字段之间添加空格。下面是这个问题的范例:用户必须输入街道地址(address1),但地址字段前后的字段(分别是business和address2)是可选的。是否有一种方法可以在模板中设置合并字段,这样,如果用户将某些内容放入业务字段,则合并生成的文档将具有业务字段的值,后跟一个空格,但如果用户将字段留空,则合并生成的文档将不具有该字段或空格?我可以看到实现这一目标的两种可能方式:1。使用一个单独的合并字段

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

以下是我针对这两种解决方案的psuedocode: 1.[onshow.business][onshow;如果[business]!=空白,则为“”;否则为“”][onshow.address1] 2.[onshow.business和“”][onshow.address1]


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

这将在
business
的值后插入一个不间断的空格,如果它不是
'

您可能会遇到的问题是Word如何表示空间。。。我建议从插入一个问题较少的字符开始,以确保标记正常工作(如a
^
或a
a
可能),然后找到合适的字符/参数组合以使空格正常工作

当你开始考虑这个问题时,我会尝试
\s
: 然后我看一下
xml:space=“preserve”

它看起来像是出现在
标签上,如下所示:
,因此您可以尝试以下操作:

PHP:

模板:

[onshow.business; if [val] != ''; then '[val] ';][onshow.p;att='xml:space']
[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]

可能有更好的方法来处理
att
,但这至少应该让您开始。

以下两种解决方案假设
[onshow.business]
[onshow.address1]
位于同一Ms Word段落中

你必须:

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

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

2) 然后在字段
[onshow.business]
上添加参数magnet,以便在字段为空时删除与他在一起的空格

例如:

Hello [onload.business;magnet=w:r+w:r] [onload.address1]
与显示代码段定界的
|
相同的示例:

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

以汽车为例,该字段
[onshow.business]
必须与前面的文本分开,否则它将以删除空格的相同方式删除前面的文本。

以防有人需要,根据Sarah和Skrol29的回答,以下是我为我的文档准备的内容:

PHP:
不变

模板:

[onshow.business; if [val] != ''; then '[val] ';][onshow.p;att='xml:space']
[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]
合并文档: 业务名称和地址2留空:

Joe Bloggs, 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
Joe Bloggs, Smith Co., 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
填写businessName,但地址2留空:

Joe Bloggs, 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
Joe Bloggs, Smith Co., 123 Main Street, Los Angeles, CA 90066; 310-555-1212; test@email.com
businessName留空,但address2已填写:

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

嘿,我从来没有使用过opentbs,也不知道它有什么可能,但我已经为同样的问题创建了(像docx模板语言一样的小胡子)谢谢,Sarah;我还没有足够的声望点数来投票,所以我想在这里表达我的谢意。谢谢你,Skrol29!我还不能提高投票率,但我认为你们的opentbs非常棒,谢谢你们在这个问题上做出如此迅速的回应。