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

Тема в разделе "Lotus - Программирование", создана пользователем ambarka, 4 июл 2005.

Статус темы:
Закрыта.
  1. ambarka

    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
    Код (Text):
    var1:=IRichTextItem.Values; // выдает тип OleVariant
    после таких вот прелобразований :
    str1:=string(var1); получается тот же самый плайн текст. хотя если посмотреть на содержимое var1 как OleVariant - в отладчике - то видно что там что то очень непоянтоное:
    Код (Text):
    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) получается обычный текст ...
    Код (Text):
    str1='Тема выступления'#9'Время по графику'#9'Время на выступление и ответы на вопросы (мин.)'#9'Организация'#9'Выступающий'#$D#$A'Вступительное слово. Место страхования в системе обеспечения гарантий на '#$D#$' и т.д.

    Должно ли в var1 храниться что-то, из чего потом получиться не просто текст? (насколько явижу тут подразумевается таблица)
    Видно явно что колонки разделяются табуляцией #9,
    и ["5<0 2KABC?;5=8O] соответствует [Тема выступления] по количеству символов. далее идет таб.
    Может это какой-то неполноценный Richtext? как отличить? может зря я мучаюсь? :)
    Непойму просто как тогда формируется таблица из этих данных... а ведь она явно формируется, а формируется вот что:
    Код (Text):
    <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. Лотус пятый.
     
  2. ambarka

    ambarka Гость

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

    Domino6 Гость

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

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

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

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

    ambarka Гость

  5. ambarka

    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...

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

    Domino6 Гость

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

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

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

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

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

    ambarka Гость

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

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

    Domino6 Гость

    Простой экспорт в rtf из ричтекстового поля
    Код (Text):
    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
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей