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

Работа с файлами и базами данных
Ответить
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

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

Сообщение pavel_urkaev »

Приветствую сообщество 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
Однако, разумно было-бы вовлечь готовое решение, а не "изобретать" Свое...

Заведомо, благодарен за внимание к Моему вопросу)
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

Если нет возможности использовать Report Generation Toolkit, то можно работать через .NET/ActiveX. RGT по сути является оберткой над .NET/ActiveX вызовами через Property/Invoke Nodes и частично упрощает работу, т.к. имеет описание каждого vi/метода/свойства, обработку ошибок, заданные typedef'ы и т.п. Без RGT вам придётся всё это делать с нуля, взяв описание .NET интрфейса с сайта microsoft. Есть вот такой маленький пример: 1 (или 2), а также 3, 4.
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

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

Сообщение pavel_urkaev »

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

Вопрос 2: Возможно кто-то решал задачу добавления таблицы в MS ActiveX RichTextBox. Не могли бы вы поделиться опытом или примером?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

pavel_urkaev писал(а):не хотелось бы использовать такое "нагромождение", как ActiveX
Не вижу в этом ничего страшного. Если вы не пытаетесь создать кроссплатформенное приложение, то можно спокойно привязываться к ActiveX или .NET, т.к. они используются повсеместно на современных версиях ОС. Причём тот же RichTextBox в :labview: использует .NET интерфейс: System.Windows.Forms.RichTextBox, так что вы уже получаете зависимость от системной библиотеки и от фреймворка, если будете использовать этот компонент.
pavel_urkaev писал(а):Возможно кто-то решал задачу добавления таблицы в MS ActiveX RichTextBox.
Если кто-то и решал её именно в :labview: , то результатами он не поделился, ничего в поиске не нашлось. Задача не совсем уж простая, чтобы создать таблицу "вручную", нужно использовать коды форматирования RTF, как описано здесь. Для LabVIEW примеров нет, но можно найти для других сред: 1, 2, 3. Насчёт бесплатных библиотек: находятся в поиске какие-то библиотеки, но похоже что тоже на .NET, лучше ли они будут, чем библиотека Microsoft, сложно сказать, нужно проверять.
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

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

Сообщение pavel_urkaev »

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

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

Сообщение pavel_urkaev »

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

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

Изображение

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

Изображение

Это оказалось для Меня неожиданностью, ведь Я ожидал увидеть в отчете из LV картину, аналогичную Word (1ый случай).
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

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

Сообщение pavel_urkaev »

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

Для решения проблемы с генерацией отчета RTF в LV, Я прибегнул к изменению процедуры сохранения документа Word. Для этого вызов ВП SaveReportToFile был заменен на вызов метода (Invoke Node) - Word._Document.SaveAs (http://msdn.microsoft.com/ru-ru/library ... aveas.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
)


Код вызова:
Изображение

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

Может быть у кого-нибудь есть соображения, как передать верные типы в метод?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

В качестве аргументов передаются параметры типа Variant. Этот тип является универсальным, но не до такой-же степени, как вы пытаетесь использовать.... Например, FileName. Это путь к файлу, текстовая строка. Зачем туда отдавать reference? И все отстальные параметры там используют простые типы данных, по значению, а не указатели. Вам нужно передавать соответствующий тип данных, который автоматически преобразуется в Variant. Для имени файла - это строка, опциональные аргументы - число, либо булевый тип и так далее. Референс используется только если надо отдавать указатели на объекты.
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

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

Сообщение pavel_urkaev »

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

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

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

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

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

Сообщение pavel_urkaev »

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

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

Выходит, что модуль LabVIEW Report Generation Toolkit for Microsoft Office сохраняет Word отчеты в формате .Doc, не зависимо от расширения файла (поэтому и получался такой странный RTF-файл). Если Я ошибаюсь, поправьте)
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Сохранение данных»