Как вставить условные пробелы в docx с помощью opentbs (только если определенные поля не являются пустыми)


Я использую opentbs для создания отчетов в формате .docx из данных, введенных пользователями в форму, и хотел бы иметь возможность условно добавлять пробелы между полями. Вот пример парадигмы проблемы: пользователь должен ввести адрес улицы (адрес1), но поля непосредственно перед и после поля адреса (бизнес и адрес2 соответственно) являются необязательными. Есть ли способ настроить поля слияния в шаблоне так, чтобы, если пользователь что-то вкладывает в бизнес поле, документ, полученный в результате слияния, будет иметь значение бизнес-поля, за которым следует пробел, но если пользователь оставит поле пустым, в документе, полученном в результате слияния, не будет ни поля, ни пробела? Я вижу два возможных способа достижения этой цели: 1. использование отдельного поля слияния, которое печатает пробел, только если поле "бизнес" не является пустым; или 2. использование поля слияния в шаблоне, которое печатает как значение поля, так и пробел, но только если поле не пустой.

Вот мой psuedocode для этих двух решений: 1. [onshow.business][onshow;если [бизнес]!=пустой; тогда "';иначе"][onshow.адрес1] 2. [onshow.бизнес И ''][onshow.адрес1]

Похоже, что это должно быть возможно, и все же я не смог найти способ превратить любой псевдокод в реальные, функционирующие поля слияния в моем docx. шаблон. Я просмотрел все записи на этом форуме и на форуме tbs, а также документацию, но проблема не решена прямо был поднят, и то, что я пробовал, не сработало. Любая помощь будет очень признательна.

Author: James, 2014-03-25

3 answers

Это вставит неразрывный пробел после значения business, если это не так '':

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

Проблема, с которой вы можете столкнуться, заключается в том, как слово представляет пробел... Я бы предложил начать с вставки менее проблемного символа, чтобы убедиться, что ваш тег работает правильно (например, ^ или и a, возможно), а затем поработать над поиском правильной комбинации символов/параметров, чтобы пространство работало.

Когда вы начнете смотреть на это, я бы попробовал \s: http://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';

ШАБЛОН:

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

Вероятно, есть лучший способ справиться с att, но это должно помочь вам, по крайней мере, начать.

 4
Author: Sarah Kemp, 2014-03-25 15:32:06

На всякий случай, если кому-то это нужно, вот что я собрал для своего документа, основываясь на ответах Сары и Skrol29:

PHP:
никаких изменений

ШАБЛОН:

[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: С именем компании и адресом 2, оставленными пустыми:

Joe Bloggs, 123 Main Street, Los Angeles, CA 90066; 310-555-1212; [email protected]

С заполненным именем компании, но адресом 2, оставленным пустым:

Joe Bloggs, Smith Co., 123 Main Street, Los Angeles, CA 90066; 310-555-1212; [email protected]

С именем организации, оставленным пустым, но заполненным адресом 2:

Joe Bloggs, 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; [email protected]

С обоими:

Joe Bloggs, Smith Co., 123 Main Street Suite 42, Los Angeles, CA 90066; 310-555-1212; [email protected]
 4
Author: James, 2014-03-27 15:00:12

Два следующих решения предполагают, что [onshow.business] и [onshow.adress1] находятся в одном и том же абзаце Ms Word.

Вы должны:

1) было пространство после поля [onshow.business], которое имеет формат текста, отличный от поля. Например, вы можете просто увеличить на единицу сторону шрифта символа пробела.

Примечание: Ms 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] должно быть в отдельном фрагменте текста перед ним, в противном случае оно удалит текст перед тем, как таким же образом удалить пробел.

 2
Author: Skrol29, 2014-03-28 10:46:18