Работа с форматом RTF в LabVIEW

Работа с файлами и базами данных

Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 20 Jul 2014, 12:33

Приветствую сообщество LabVIEW Portal. Мне требуется Ваша помощь - информация о работе с форматом RTF в LabVIEW (стандартные средства или сторонние библиотеки).

Задача - сформировать текстовый отчет в формате RTF (заполнить по шаблону ряд полей). Отчет содержит таблицы, текстовые области (параграфы) с различным размером шрифта, причем местами - шрифт выделяется жирным.

Посмотрел палитру функций Report Generation - позволяет строить отчет в HTML, WORD, EXCEL. Причем, 2 последних формата, как Я понял, доступны только при наличии модуля LabVIEW Report Generation Toolkit for Microsoft Office installed. Этот вариант не подходит так, как по возможности нужны стандартные решения чистого LV (без доп. модулей), возможны сторонние библиотеки (в идеале бесплатные).

Поэтому возникает вопрос - работал ли кто нибудь в LV c RTF данными (сохранение, загрузка, редактирование). Если да, то какие средства использовал и на какие нюансы Мне следует обратить внимание?

Из альтернативных решений, вижу:
1) Собственноручная реализация нужной логики в LV
2) Вызов имеющихся реализаций на C++ (пока не искал таковых) из LV
Однако, разумно было-бы вовлечь готовое решение, а не "изобретать" Свое...

Заведомо, благодарен за внимание к Моему вопросу)
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby dadreamer on 20 Jul 2014, 13:02

Если нет возможности использовать Report Generation Toolkit, то можно работать через .NET/ActiveX. RGT по сути является оберткой над .NET/ActiveX вызовами через Property/Invoke Nodes и частично упрощает работу, т.к. имеет описание каждого vi/метода/свойства, обработку ошибок, заданные typedef'ы и т.п. Без RGT вам придётся всё это делать с нуля, взяв описание .NET интрфейса с сайта microsoft. Есть вот такой маленький пример: 1 (или 2), а также 3, 4.
User avatar
dadreamer
professor
professor
 
Posts: 3149
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 800
I/O VIP vision internet

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 21 Jul 2014, 11:08

Приветствую, dadreamer. Я тоже первоначально рассматривал вариант c RTB. Однако, не хотелось бы использовать такое "нагромождение", как ActiveX (это же целый элемент управления Windows). В первую очередь - интересует библиотека, работающая чисто с форматом RTF и ничего более (если таковая имеется конечно). Плюс, волнует вопрос с Таблицами в нем (интернет не богат примерами сходу).

Вопрос 2: Возможно кто-то решал задачу добавления таблицы в MS ActiveX RichTextBox. Не могли бы вы поделиться опытом или примером?
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby dadreamer on 21 Jul 2014, 18:13

pavel_urkaev wrote:не хотелось бы использовать такое "нагромождение", как ActiveX

Не вижу в этом ничего страшного. Если вы не пытаетесь создать кроссплатформенное приложение, то можно спокойно привязываться к ActiveX или .NET, т.к. они используются повсеместно на современных версиях ОС. Причём тот же RichTextBox в :labview: использует .NET интерфейс: System.Windows.Forms.RichTextBox, так что вы уже получаете зависимость от системной библиотеки и от фреймворка, если будете использовать этот компонент.
pavel_urkaev wrote:Возможно кто-то решал задачу добавления таблицы в MS ActiveX RichTextBox.

Если кто-то и решал её именно в :labview: , то результатами он не поделился, ничего в поиске не нашлось. Задача не совсем уж простая, чтобы создать таблицу "вручную", нужно использовать коды форматирования RTF, как описано здесь. Для LabVIEW примеров нет, но можно найти для других сред: 1, 2, 3. Насчёт бесплатных библиотек: находятся в поиске какие-то библиотеки, но похоже что тоже на .NET, лучше ли они будут, чем библиотека Microsoft, сложно сказать, нужно проверять.
User avatar
dadreamer
professor
professor
 
Posts: 3149
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 800
I/O VIP vision internet

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 23 Jul 2014, 09:09

Добрый день, dadreamer. Благодарю за пояснения, посмотрю спецификацию RTF на предмет построения таблиц. На данный момент, склоняюсь к ActiveX (это быстрее и проще, нежели реализовывать нужную часть спецификации). Результат выложу сюда, на случай, если кто-то столкнется с аналогичной ситуацией.
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 26 Jul 2014, 16:43

Добрый вечер. Я решил изучить возможности модуля LV - LabVIEW Report Generation Toolkit for Microsoft Office для своих задач (построение файла-отчета в RTF) и столкнулся с необычным поведением. Возможно кто-то сможет помочь?

Создание отчета в Word:
1) открываю Word (чистый документ),
2) добавляю таблицу в документ,
3) Файл->Сохранить как...->, указываю путь к файлу и расширение RTF, сохраняю документ,
4) Полученный файл открывается и в Word, и в WordPad (контент отображается нормально)
5) Если открыть файл на редактирование как текст, то можно увидеть стандартную структуру RTF

Image

Создание отчета в LV + Report Generation Toolkit for Microsoft Office:
1) выполняю ВП,
2) Полученный файл нормально открывается только в Word (таблица отображается), а в WordPad открывается, но контент искажен (таблицы нет, беспорядочный текст)
3) Если открыть файл на редактирование как текст, то можно увидеть двоичную структуру файла (на рис - HEX)

Image

Это оказалось для Меня неожиданностью, ведь Я ожидал увидеть в отчете из LV картину, аналогичную Word (1ый случай).
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 26 Jul 2014, 17:03

У Меня к сообществу еще одни вопрос - есть ли у кого-нибудь опыт вызова .NET-кода и создания .NET-объектов в LV?

Для решения проблемы с генерацией отчета RTF в LV, Я прибегнул к изменению процедуры сохранения документа Word. Для этого вызов ВП SaveReportToFile был заменен на вызов метода (Invoke Node) - Word._Document.SaveAs (http://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.word.document.saveas.aspx).

Сигнатура метода:
void SaveAs(
ref Object FileName,
ref Object FileFormat,
ref Object LockComments,
ref Object Password,
ref Object AddToRecentFiles,
ref Object WritePassword,
ref Object ReadOnlyRecommended,
ref Object EmbedTrueTypeFonts,
ref Object SaveNativePictureFormat,
ref Object SaveFormsData,
ref Object SaveAsAOCELetter,
ref Object Encoding,
ref Object InsertLineBreaks,
ref Object AllowSubstitutions,
ref Object LineEnding,
ref Object AddBiDiMarks
)


Код вызова:
Image

Однако, при вызове метода происходит следующая ошибка
Image

Может быть у кого-нибудь есть соображения, как передать верные типы в метод?
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby Borjomy_1 on 27 Jul 2014, 07:26

В качестве аргументов передаются параметры типа Variant. Этот тип является универсальным, но не до такой-же степени, как вы пытаетесь использовать.... Например, FileName. Это путь к файлу, текстовая строка. Зачем туда отдавать reference? И все отстальные параметры там используют простые типы данных, по значению, а не указатели. Вам нужно передавать соответствующий тип данных, который автоматически преобразуется в Variant. Для имени файла - это строка, опциональные аргументы - число, либо булевый тип и так далее. Референс используется только если надо отдавать указатели на объекты.
Borjomy_1
expert
expert
 
Posts: 1828
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 319
VIP

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 27 Jul 2014, 12:39

Приветствую, Borjomy_1. Я понимаю, о чем Вы говорите, - замечание вполне справедливое.

Однако, в данном случае Я руководствовался следующим: здесь вызывается код .NET, соответственно и тип данных, которые него передаются, - должен быть .NET. Для параметра путь к файлу или пароль на открытие докуента - объект String, и т д. Причем, по сигнатуре метода - все параметры должны быть приведены к типу .NET Object.

Причем, выше я дал неверную спецификацию метода (вызывается метод SaveAs2, а не SaveAs). Вот нужная (http://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.word.document.saveas2.aspx).

Я попробую вызвать метод SaveAs2 без передачи Missing (значение параметра берется по умолчанию), только конкретное указание параметров .NET, и с передачей типов LV (как Вы заметили). О результате - сообщу)
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

Re: Работа с форматом RTF в LabVIEW

Postby pavel_urkaev on 27 Jul 2014, 16:07

Borjomy_1, Вы были правы! При передачи в метод Word._Document.SaveAs2 параметров типов LV, все работает. Судя по всему Я ошибался, когда преобразовывал параметры в .NET представление (возможно эта операция срыта от разработчика и выполняется "внутри" Invoke Node). Спасибо за помощь!

Код вызова на всякий случай - может кому-то пригодится
Image

Выходит, что модуль LabVIEW Report Generation Toolkit for Microsoft Office сохраняет Word отчеты в формате .Doc, не зависимо от расширения файла (поэтому и получался такой странный RTF-файл). Если Я ошибаюсь, поправьте)
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0


Return to Сохранение данных

Who is online

Users browsing this forum: No registered users and 2 guests

cron