Как расшифровать форматированные текстовые данные, экспортированные в dxl с помощью lotus script?

#encryption #lotus-notes #lotus-domino

#шифрование #lotus-notes #lotus-domino

Вопрос:

я использую код lotus script для экспорта элементов в файл dxl. вот код.

 Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim filename As String
Dim stream As NotesStream
Dim exporter As NotesDXLExporter
Set db = session.Currentdatabase
set dc = db.UnprocessedDocuments
filename = "c:/temp/exportDocs.dxl"
set stream = session.createStream()
If stream.Open(filename) Then
    Call stream.Truncate()
    set exporter = session.CreateDxlExporter()
    exporter.Richtextoption = 1
    exporter.MIMEOption = 0 
    Call stream.WriteText(exporter.Export(dc))
End if
  

End Sub

после экспорта данных.я получаю тело элемента этого типа

GV9AAAEAAAAAAAA………. зашифрованные данные.

я декодировал этот буфер в base64 и получаю свои данные. но я получаю некоторый заголовок в своих данных после декодирования base64. начальная сигнатура буфера заголовка после декодирования base64 равна 0x5AFF82. кто-нибудь может сказать мне, как я могу ее расшифровать.?

Комментарии:

1. Почему вы не используете exporter.Richtextoption = 0 ? Это не привело бы к преобразованию форматированных текстовых данных в base64.

2. @Knut: мне нужно получить тело путем синтаксического анализа dxl. если я использую exporter. Richtextoption = 0 тогда мне будет очень сложно проанализировать форматированные текстовые данные, поскольку они содержат много тегов формата. мне просто нужен текст из тела, а не его формат, и все..

3. exporter.Richtextoption = 1 также должны содержать все теги формата. Я бы написал агент в Notes, который копирует текстовую часть RichText в новый текстовый элемент и читает его вместо этого. Агент формулы может выглядеть следующим образом: FIELD BodyText := @Abstract([TEXTONLY]; 64000; ""; "Body")

Ответ №1:

Поскольку поле представляет собой форматированный текст, «данные» — это не просто текст, но и форматирование, возможно, изображения, таблицы, гиперссылки и так далее. Звучит так, как будто вы хотите извлечь только текст.

Почему вы считаете, что вам нужно сделать это с DXL? Класс NotesRichTextItem имеет свойство Text, которое извлекает только текст, который, как вы, кажется, говорите, вам нужен. Даже если DXL необходим по какой-либо другой причине, вы могли бы извлечь текст таким образом и заменить или дополнить форматированное текстовое содержимое в DXL с помощью CDATA, содержащего только текст.

Если по какой-либо причине DXL является для вас важной частью процесса: Форматированный текст состоит из «записей CD», каждая из которых включает заголовок, за которым следуют некоторые данные. Весь текст находится внутри записей CD «text run», но есть много других типов. Информация о заголовках записей CD стандартизирована таким образом, что вам не нужно уметь распознавать одну из них, чтобы пропустить все те, которые не содержат текста. Таким образом, не так уж сложно написать код для сканирования этих данных base64 и извлечения только тех, которые содержат ваш текст. Однако текст закодирован в формате LMBCS, поэтому вам нужно будет немного повозиться, чтобы расшифровать его, если не все данные находятся в диапазоне ASCII. Руководство по C API описывает формат CD.