потрошение .nsf-файла через Delphi

  • Автор темы ambarka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

ambarka

Кто-нибудь это делал?

В некоторых факах есть пример работы с лотусовской адресной книгой.
Подключил Lotus Notes Automation Classes C:\Lotus\Notes\notes32.tlb и Lotus Domino Objects C:\Lotus\Notes\domobj.tlb.

Все в принципе не сложно, но спотыкаюсь с типом данных richtext.
Проблема собственно заключается в том, что неполучается получить из richtext ничего кроме plain-текста, а хотелось бы достать то, что там действительно есть (в идеале html).

создаю переменные типов IDocument, IItem, IRichTextItem;
С последним работаю если тип данных RICHTEXT, но вот дальше тупик, Свойства EmbeddedObject Unassigned, функция GetFormattedtext и Text_ выдают один и тот же результат - плайн текст (такое может быть?); свойство Values
Код:
var1:=IRichTextItem.Values; // выдает тип OleVariant
после таких вот прелобразований :
str1:=string(var1); получается тот же самый плайн текст. хотя если посмотреть на содержимое var1 как OleVariant - в отладчике - то видно что там что то очень непоянтоное:
Код:
var1='"5<0 2KABC?;5=8O	@5<O ?> 3@0D8:C	@5<O =0 2KABC?;5=85 8 >B25BK =0 2>?@>AK (<8=.)	@30=870F8O	KABC?0NI89
ABC?8B5;L=>5 A;>2>.'
а после обкастовки string(var1) получается обычный текст ...
Код:
str1='Тема выступления'#9'Время по графику'#9'Время на выступление и ответы на вопросы (мин.)'#9'Организация'#9'Выступающий'#$D#$A'Вступительное слово. Место страхования в системе обеспечения гарантий на '#$D#$' и т.д.


Должно ли в var1 храниться что-то, из чего потом получиться не просто текст? (насколько явижу тут подразумевается таблица)
Видно явно что колонки разделяются табуляцией #9,
и ["5<0 2KABC?;5=8O] соответствует [Тема выступления] по количеству символов. далее идет таб.
Может это какой-то неполноценный Richtext? как отличить? может зря я мучаюсь? :)
Непойму просто как тогда формируется таблица из этих данных... а ведь она явно формируется, а формируется вот что:
Код:
<TABLE BORDER=1>
<TR VALIGN=top><TD WIDTH="242"><B>Тема выступления</B></TD><TD WIDTH="71"><B><font color=green><b>Время</b></font> по графику</B></TD><TD WIDTH="63"><B><font color=green><b>Время</b></font> на выступление и ответы на вопросы (мин.)</B></TD><TD WIDTH="60"><B>Организация</B></TD><TD WIDTH="82"><B>Выступающий</B></TD></TR>
...

Непонимаю, вкус есть а мяса нет! ((с)реклама)

Товарищ Shadow486 кажется работал в направлении richtext->html но через Lotus script кажется, но я думаю тип данных он и в африке типа даннных, неважно через что с ним работать, если он слышит то может откликниться и поможет?

p.s. Лотус пятый.
 
A

ambarka

пытаюсь конечно разобраться как это происходит сейчас в лотус-скрипте, но пока безуспешно, тут еще dll-ка прикручена, боюсь что все самое интересное окажется внутри
 
D

Domino6

1. Есть dll на С++ для импорта экспорта - но не бесплатная - интересы в приват

2. Есть набор классов (аналог Notes API) для Delphi

3. По опыту работы на сях с ричтекстом можно работать черех создание CD-text формата а затем преобразование его в нйжній.

4. Можно указать полю ричтекст тип майм тогда на скрипте взяв плайн текст от майм содержимого получиш чистый html правда есть проблема с русским но можно подправить с помошью настроек майма в локейшенах пользователя
 
A

ambarka

спасибо, помог как раз 4-ый способ описанный вот тут

 
A

ambarka

<!--QuoteBegin-Domino6+5:07:2005, 12:08 -->
<span class="vbquote">(Domino6 @ 5:07:2005, 12:08 )</span><!--QuoteEBegin-->4. Можно указать полю ричтекст тип майм тогда на скрипте взяв плайн текст от майм содержимого получиш чистый html правда есть проблема с русским но можно подправить с помошью настроек майма в локейшенах пользователя
[snapback]21923" rel="nofollow" target="_blank[/snapback]​
[/quote]

Уважаемый Domino6, все случилось как вы и предсказали - проблемы с русскими буквами
вместо
Rich text Rich Text Text text text па па па мама
получаем
Rich text Rich Text Text text text РБ РБ РБ НБНБ

в локейшенах не нашел особо настроек MIME settings
есть только Outbound attachment enconding method: Base64 or Quoted Printable
и Outbound Macintosh attachment conversion...

где вы имели вв иду изменить настройки майма?
 
D

Domino6

Настройка
Делаеш место вызова "MIME" указываеш "преобразовывать в майм"
Делаеш документ "Настройка майм" Устанавливаеш набо символов Английский привязываеш к месту вызова

Работа
Береш документ пересохраняеш его (в боди он сначала допишет ентер, и так будет каждый раз когда сохраняеш)
Береш класс майм от него добираешся до текста
Береш текст выгружаеш, только не пугайся там вместо букв будут их коды

Неудобства
Пересохранение и переключение мест вызова (редакция експортера)
В хтмл надо указыват не русскую кодировку
размер файла в 5-6 раз больше , поскольку на 1-ну букву 5-6 символов
нечетабельно в ДОС и не подправиш

По-этому этот метод стоит 4-ым.

Просмотри еще раз варианты или "удачи" (она понадобится)
 
A

ambarka

Всем спасибо.

последняя проблема оказалась совсем простой, он же ее в koi8-r выплевывал
 
D

Domino6

Простой экспорт в rtf из ричтекстового поля
Код:
Declare Function ExportRTF Lib "nxrtf" Alias "ExportRTF" (Byval sTempFile As String, Byval flags As Long, hmod As Long, Byval altlibrary As String, Byval sRTFFile As String) As Integer
Declare Function MailGetMessageBodyComposite Lib "nnotes.dll"(Byval hNote As Long,Byval ItemName As String,Byval FileName As String, FileSize As Long)As Integer

Sub Click(Source As Button) 
Dim Ws As New NotesUIWorkspace
Dim Doc As NotesDocument
Set Doc = Ws.CurrentDocument.Document
Dim fileSize As Long 
Const file_name = "c:\temp\text.cd"
Const font_file = "c:\temp\fonts.cd"
Call MailGetMessageBodyComposite(Doc.handle , "Body", FILE_NAME$, fileSize) ' write to file body field
Call MailGetMessageBodyComposite(Doc.handle , "$Fonts", font_file$, fileSize) ' write to file font field
Call ExportRTF("c:\temp\export.cd", 0, 0, "", "c:\temp\export.rtf" )
End Sub
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!