• 🚨 24 часа до повышения цены на курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    Последний день записи в текущий поток по старой цене Подробнее о курсе ...

Как узнать размер Richtext

  • Автор темы Автор темы KLif
  • Дата начала Дата начала
K

KLif

Всем привет. Вообщем такая проблема ... на форме есть richtext, в нём находится всякая ерунда: картинки, доки и т.д.

Нужно узнать размер этого richtext ...

Forall item In uidoc.Document.Items
If item.Name = "Attach_Body" Then
l = item.ValueLength
End If
End Forall

В итоге l = 0, но если я таким же способом переберу все поля, то получу опр значение, после чего добавлю в свой RichText какой-нибудь док, то значение увеличится ...

Ещё один способ:
Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
Msgbox(rt.ValueLength)
при этом, чтобы не лежало на richtext сообщение всегда - "2"
 
1 Документ ужо сохранён?
2 Надо узнать размер вложений?
 
RTItem.ValueLength
102-пустое рт поле
Если больше 102, значит там уже что-то есть...
 
1. RT не сохранён ... да, нужно узнать размер вложений, чтобы в дальнейшем его ограничить ...
2. RTItem.ValueLength - выдаёт 2 и причём всегда ...
 
@AttachmentLengths возвращает размеры аттачей без сохранения дока... Работает и в Evaluate...если надо скриптом...
 
после сохранения - GetEmbeddedObject method - получаете все вложеия в РТ поле, а патом проверяете их размер

Прастой пример , а одно вложение

Код:
Dim doc As NotesDocument
Dim rtitem As Variant
Dim object As NotesEmbeddedObject
Dim sizeInBytes As Long
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Set object = rtitem.GetEmbeddedObject( "City picture" )
sizeInBytes = object.FileSize
End If

А можно и собаками -
@AttachmentLengths
 
Так делал, постоянно говорит на строчке sizeInBytes = object.FileSize - что объект не выбран ... но такого не может быть ... док сохранял ...
 
Для: KLif
Проверять надо
Код:
If not object is Nothing Then sizeInBytes = object.FileSize
 
Для: KLif
Проверять надо
Код:
If not object is Nothing Then sizeInBytes = object.FileSize

Ога, и в результате sizeInBytes = 0, не может он найти объекты в ричтексте ... но они там есть, т.к. сумарный размер документа увеличивается с каждым вложением ...
 
Можно на скриптах и без сохранения.

Код:
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim rtitem As NotesRichTextItem

Set uidoc = ws.CurrentDocument
Call uidoc.Refresh(True)

Set rtitem = uidoc.Document.GetFirstItem("Поле")
If Not Isempty(rtitem.EmbeddedObjects) Then
Forall x In rtitem.EmbeddedObjects
Msgbox Cstr(x.FileSize)
End Forall
End If
 
Можно на скриптах и без сохранения.

Код:
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim rtitem As NotesRichTextItem

Set uidoc = ws.CurrentDocument
Call uidoc.Refresh(True)

Set rtitem = uidoc.Document.GetFirstItem("Поле")
If Not Isempty(rtitem.EmbeddedObjects) Then
Forall x In rtitem.EmbeddedObjects
Msgbox Cstr(x.FileSize)
End Forall
End If

1. rtitem.EmbeddedObjects - пустое
2. Set uidoc = ws.CurrentDocument
Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
Call uidoc.Save - вот так работает, НО размер rt какой то не понятный, почему он не соответствует реальному размеру файла?
 
1. Если файл аттачится на бекэнде, то аттачи нужно получать потом не из РТитема, а из нотесдокумента.
2. Аттачи пакуются внутренними архиваторами... Птотму и размер не совпадает...
 
1. Если файл аттачится на бекэнде, то аттачи нужно получать потом не из РТитема, а из нотесдокумента.
2. Аттачи пакуются внутренними архиваторами... Птотму и размер не совпадает...

1) пробовал получить из NotesDocument, размер найденого = 0
2) решил остановится на способе:

Set uidoc = ws.CurrentDocument
Set rt = New NotesRichTextItem(uidoc.Document, "Attach_Body")
Call uidoc.Refresh(True)
sizeInBytes = rt.ValueLength

Всем огромное спасибо!
 
А Вам вообще что, нужно сделать ограничение на размер вклабываемых файлов? Тогда проверяйте размер файла до аттача... Так разумней будет...
 
А Вам вообще что, нужно сделать ограничение на размер вклабываемых файлов? Тогда проверяйте размер файла до аттача... Так разумней будет...

Да, есть richtext, вкладываем файлы и в опр. момент он должен запретить вложение ... я делаю так

1) создал доп. richtext
2) вкладываю в него новые файлы
3) смотрю сумму обоих ричтекстов и сравниваю с границей вложения

Если узнавать размер файла аттача, то:

- Isempty(rtitem.EmbeddedObjects) - в таком случае их нет
- Isempty(doc.EmbeddedObjects) - в таком случае размер равен 0, но если вывести на печать Msgbox (obj.Name) - то он выдаст имя объекта, почему тогда размер 0?
 
Это не совсем правильно.. Вы сначала выполнили операцию, а птомо узнали размер... Обычно делается наоборот.. Сначала узнаем рамер файла. а потом уже вкладываем файл, если размер подходит... Нужно стараться избегать лишних действий... оптимизиция - это важно даже для лотуса...
 
Это не совсем правильно.. Вы сначала выполнили операцию, а птомо узнали размер... Обычно делается наоборот.. Сначала узнаем рамер файла. а потом уже вкладываем файл, если размер подходит... Нужно стараться избегать лишних действий... оптимизиция - это важно даже для лотуса...

А как узнать размер файла, если мы его вот так получаем:

@Command([EditGotoField];"Attach_Body");
@Command([EditInsertFileAttachment])
 
Код:
@Command([EditGotoField];"Attach_Body");
@Command([EditInsertFileAttachment]);
@PROMPT( [OK], "", @AttachmentLengths );

Разве что рефреш делать
 
Сделал так, где Temp - доп ричтекст

@Command([EditGotoField];"Temp");
@Command([EditInsertFileAttachment]);
@Command([ToolsRunMacro] ; "(Insert Template2)") - агент, смотрит размер основного ричтекст + темт, если не заходит за границу, то копирует всё из темпа в наш ричтекст ... после чего чистит темп ...

Осталась одна проблем, Temp надо скрыть, но когда он скрыт - с ним нельзя работать ...
 
А как узнать размер файла, если мы его вот так получаем:

@Command([EditGotoField];"Attach_Body");
@Command([EditInsertFileAttachment])

А что Вам стоит получить его скриптом? Вот Вам готовый пример аттача с проверкаой размера...

Код:
				On Error Goto errhand

Dim file As Variant
Dim rtItem As NotesRichTextItem
Dim obj As Variant
Dim o As notesEmbeddedObject 
Dim verLen As Long

Set doc = uidoc.Document
Set rtItem = doc.GetFirstItem("Body")

Let file = ws.OpenFileDialog(False,"Выберите файл для вложения!")
If Isempty(file) Then Exit Sub

verLen = FileLen(Cstr(File(0)))

If verLen > 1048576 then
Msgbox "Размер файла не должен превышать 1-го Мб"
End If

If rtItem Is Nothing Then
Set rtItem = doc.CreateRichTextItem("Body")
End If

Call rtItem.EmbedObject(1454, "", Cstr(File(0)))
uidoc.Reload
exiting:
Exit Sub
errhand:
Msgbox "Ошибка " & Error & ", в строке " & Cstr(Erl) & ". Выбор вложения."
Resume exiting
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD