Можете ли вы объединить RTF в поле формулы Crystal Reports

В настоящее время я создаю приложение, которое генерирует отдельное письмо для каждого пользователя в наборе данных. Содержимое писем управляется через приложение vb.net, а их формат RTF сохраняется в базе данных. Когда письмо создается, все содержимое извлекается из базы данных для формирования письма с использованием логики vb.net.

После компиляции он был отправлен в качестве параметра в Crystal. Это отлично сработало, установка интерпретации текста поля в RTF позволила правильно просматривать RTF. Клиент решил, что вместо этого он хотел бы внести изменения в логику (операторы if, компилирующие текст) в Crystal.

Итак, что я сделал, так это создал пустой набор данных с кучей столбцов и заполнил эти столбцы RTF (упорядочены по идентификатору, поэтому значения никогда не изменятся, если абзац не будет удален, и для этого нет возможности). Это позволило бы мне создать строку RTF, перейдя {table.1} + {table.2} и т. д....

Вот в чем проблема. При построении строки RTF в формуле (используя + или &) отображается только первая запись RTF. Если я переключу формулу на отсутствие интерпретации, я смогу увидеть RTF для записей, выписанных со всем их содержимым, поэтому я знаю, что это там. Я также вручную объединил RTF в поле формулы и столкнулся с той же проблемой.


вывод StringVar;

output := output & "{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}\viewkind4\uc1\pard\lang1033\f0\fs23 это первый тест}" ; output := output & "{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}\viewkind4\uc1\pard\lang1033\f0\fs23 это второй тест \par \пар}";


Вывод

На данный момент я не уверен, есть ли способ обойти это, кроме как переместить весь текст в отдельные поля формул внутри самого кристалла, а затем объединить. Это означало бы, что если бы они хотели изменить текст, это нужно было бы сделать в кристалле. Я бы предпочел не идти по этому пути, поэтому я ищу мнения и предложения.


person scottacusj    schedule 14.11.2013    source источник


Ответы (1)


Crystal поддерживает RTF, однако он должен быть полностью сформирован при первом появлении записи RTF. В моем вопросе показаны две отдельные ПОЛНЫЕ записи RTF. Поскольку все записи имеют теги идентификатора RTF, это будет невозможно. Та же проблема возникла бы, если бы вы скопировали приведенный выше текст в текстовый редактор и сохранили его как RTF. Вы получите только первую строку. Это не объясняет, почему он работает как параметр, а не как формула, но, вероятно, как каждый из них оценивается и позже (параметр может потерять поддержку в будущем).

Чтобы правильно передать RTF в кристалл, вам понадобятся два объекта Rich Text Box. Один из них является временным полем, а другой - полем построителя и выбирает только отформатированный текст, а не все содержимое RTF. Пример этого можно найти по адресу:

http://moneybaron.org/2011/08/23/vb-net-merge-rtf-documents/

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

Надеюсь это поможет!!

person scottacusj    schedule 21.11.2013