Страница 1 из 3
Работа с шаблонами отчётов в формате RTF
Добавлено: 09 июн 2011, 04:45
Eugene A. Bykov
Добрый день,
Занялись разработкой новой системы взамен устаревшей. Одна из функций подразумевает подготовку отчётов, шаблоны которых присылает заказчик в формате RTF.
Как это работает сейчас? Шаблоны заказчика довольно простые. Нам необходимо заполнить 3-4 поля, остальной текст остаётся без изменений. Мы используем компонент Дельфи EkRtf, который позволяет указать поля ввода в RTF-файле в формате \VARIABLE\, а отчетогенератор затем берёт этот шаблон, и подставляет значение передаваемой переменной VARIABLE в то место, где в шаблоне фигурирует текст \VARIABLE\ с сохранением исходного форматирования. Есть ряд других фич (таблицы, например), но они нами сейчас в шаблонах такого типа не используются.
Так вот вопрос. Есть ли возможность выполнить эту же операцию средствами генератора отчётов StimulSoft? Я обнаружил возможность конвертации шаблонов RTF в формат отчётов StimulSoft, т.е. внутренние способы работы с RTF есть (как на чтение - Import.RTF.exe, так и на запись - Экспорт отчёта в RTF). Может быть, сможете указать, в каком направлении думать. Либо, есть ли возможности программной работы с шаблонами в формате RTF. Проблема в том, что конвертер весь файл RTF преобразует в ДатаБенды, поабзацно, изменяя форматирование, что не совсем хорошо.
Спасибо,
С уважением,
Евгений
Работа с шаблонами отчётов в формате RTF
Добавлено: 09 июн 2011, 04:49
Eugene A. Bykov
Причины разработки новой системы - не только смена генератора отчётов. Основные - это миграция базы данных с DBF на MSSQL, реализация технологии штрих-кодов (как раз смена отчетогенератора), а также разработка более современного интерфейса с использованием платформы .NET.
Работа с шаблонами отчётов в формате RTF
Добавлено: 09 июн 2011, 10:28
Ivan
Здравствуйте.
Как вариант решения задачи, вы можете вставить в отчет компонент StiRichText, в него загрузить ваш rtf-шаблон, и в нужных местах вставить выражения типа {DataBase.Field} или {Variable}. В свойстве Tag компонента напишите слово "rtfparagraph" для того, чтобы при экспорте в RTF исходный шаблон лежал прямо на странице. а не был обёрнут в таблицу.
Утилита Import.RTF предназначена не для импорта текста, а для преобразования исходного текста в шаблон отчета. Эта утилита бывает полезна, если есть форма отчета с таблицами в формате RTF, которую надо заполнить данными. При импорте таблицы преобразуются в бэнды, а ячейки таблиц в текстбоксы. Остается только правильно вписать выражения для данных.
Спасибо.
Работа с шаблонами отчётов в формате RTF
Добавлено: 10 июн 2011, 08:26
Eugene A. Bykov
Спасибо за ответ.
А возможно ли в StiReachText загрузить текст из шаблона RTF программным путём?
Работа с шаблонами отчётов в формате RTF
Добавлено: 10 июн 2011, 12:49
Ivan
Здравствуйте.
Вы можете использовать следующий код, к примеру:
Код: Выделить всё
RichTextBox rtb = new RichTextBox();
rtb.LoadFile(@"d:\test.rtf");
StiRichText rt = new StiRichText();
rt.RtfText = rtb.Rtf;
Спасибо.
Работа с шаблонами отчётов в формате RTF
Добавлено: 14 июн 2011, 04:03
Eugene A. Bykov
Спасибо!
Работа с шаблонами отчётов в формате RTF
Добавлено: 14 июн 2011, 10:38
Andrew
Всегда рады помочь! :biggrin:
Работа с шаблонами отчётов в формате RTF
Добавлено: 18 июн 2012, 06:35
Eugene A. Bykov
Добрый день,
Довольно старая тема, но ввиду индивидуальной работы над разными проектами, иногда проходит много месяцев, когда появляется возможность вернуться к старым проектам.
Так вот, шаблон в формате rtf импортируется прекрасно предлагаемым способом, и передаётся в RichText в отчете:
Код: Выделить всё
report = new StiReport();
report.Load("post.mrt");
StiRichText rt = report.GetComponents()["RichText1"] as StiRichText;
RichTextBox rtb = new RichTextBox();
rtb.LoadFile(tTemplate.Text);
rt.RtfText = rtb.Rtf;
//report.Compile();
report.RegData(sqlAccess.PersonList(Convert.ToInt32(radDropDownList1.SelectedValue)));
//report.Render();
report.Show();
Но поля, заключенные в круглые скобки, приводят к ошибке Unexpected character '\'
Этого можно избежать, передавая рич текст в виде только текста:
но тогда теряется форматирование, что тоже не есть хорошо.
Если задать фигурные скобки напрямую внутри рич текста компонента, не используя программного импорта из файла RTF - то шаблон работает (правда есть проблемы с кодировкой, но я не изучал корень этих проблем, т.к. напрямую внутри компонента задавать rtf неактуально).
Импорт RTF-текста вручную в дизайнере почему-то тоже приводит к ошибкам. Как-то не так обрабатывается rtf? Причём даже превью такого отчета сваливается с той же ошибкой.
На файлообменник залил шаблон mrt, с текстом, который приводит к ошибкам.
https://www.wetransfer.com/dl/7A2Qn2yX/ ... 7f13ea9667
Спасибо.
Работа с шаблонами отчётов в формате RTF
Добавлено: 18 июн 2012, 06:37
Eugene A. Bykov
Прошу прощения, в шаблоне я уже начал экспериментировать со скобками, пытаясь добавить слеш перед ними - но это не привело к решению проблемы.
Суть задачи - указать в Rtf-шаблоне ссылку на данные, передаваемые в DataTable, называемой TemplateData.
Работа с шаблонами отчётов в формате RTF
Добавлено: 19 июн 2012, 14:24
Ivan
Здравствуйте.
Основная проблема при работе с RTF-текстом - системная библиотека не позволяет полноценно работать с ним из кода, в частности, работать с командами и управляющими кодами.
Например, если вручную ввести выражение {datasource.field} в редакторе RTF, то библиотека может вставить внутрь этого текста свои управляющие символы, например может получиться
И правильно распарсить такое выражение уже практически невозможно, поэтому и происходят ошибки компиляции.
Если это выражение скопировать целиком из блокнота, то оно вставится нормально.
Как ручной вариант решения проблемы - вставлять выражение вместе с фигурными скобками из блокнота.
Мы попробуем что-нибудь доработать.
Спасибо.