Страница 1 из 2

Не выводится rtf в отчёт

Добавлено: 02 июн 2020, 10:07
SergeyPerm
Добрый день!

Подскажите пожалуйста есть файл закодированный в base64, как его можно декодировать и вставить RichText1
Пример кода:
using (var outputMemStream = new MemoryStream(System.Convert.FromBase64String(Акт.Data)))
{
using (var s = new StiZipInputStream(outputMemStream))
{
var entry = s.GetNextEntry();
while (entry != null)
{
if (!entry.IsFile)
{
continue;
}

var memoryStream = new MemoryStream();
var sb = new byte[131072];
var flag = true;
while (flag)
{
int count = s.Read(sb, 0, sb.Length);
if (count > 0)
{
memoryStream.Write(sb, 0, count);
}
else
{
memoryStream.Flush();
flag = false;
}
}
StreamReader reader = new StreamReader(memoryStream);
string str = reader.ReadToEnd();
reader.Close();
e.Value = str;
break;

}
}
}

Re: Не выводится rtf в отчёт

Добавлено: 04 июн 2020, 11:59
Ivan
Здравствуйте.

Внутри события GetValue значение надо присваивать следующим образом:

Код: Выделить всё

e.Value = System.Xml.XmlConvert.EncodeName(Stimulsoft.Report.Components.StiRichText.PackRtf(your_rtf_in_string));
Судя по вашему коду, у вас rtf сначала заархивирован в Zip-архив, а уже потом переведён в Base64 ?

Спасибо.

Re: Не выводится rtf в отчёт

Добавлено: 05 июн 2020, 18:36
SergeyPerm
Добрый вечер. Как, реализован алгоритм я не могу точно ответить, не я делал данный код просто с этим кодом работают картинки. В БД хранится строка Byte в text ячейке. Может у вас есть какое-нибудь описание как правильно работать с base64 строками ?

Re: Не выводится rtf в отчёт

Добавлено: 06 июн 2020, 17:59
Ivan
Здравствуйте.
В БД хранится строка Byte в text ячейке. Может у вас есть какое-нибудь описание как правильно работать с base64 строками ?
Пример вашей базы вы не присылали, и мы не знаем, как именно хранится у вас информация в базе данных.
Поэтому приводим общую информацию.

Base64 — стандарт кодирования двоичных данных при помощи только 64 символов ASCII.
Т.е. при раскодировании base64-строки получается массив байт.
Предположим, что внутри массива - RTF-файл, в ASCII кодировке. Тогда код для получения его содержимого должен быть таким:

Код: Выделить всё

byte[] bytes = System.Convert.FromBase64String(Акт.Data);
string your_rtf_in_string = System.Text.Encoding.ASCII.GetString(bytes);
e.Value = System.Xml.XmlConvert.EncodeName(Stimulsoft.Report.Components.StiRichText.PackRtf(your_rtf_in_string));
Спасибо.

Re: Не выводится rtf в отчёт

Добавлено: 10 июн 2020, 13:43
SergeyPerm
Добрый день. Стали выводится знаки в hex кодировке PK _x0003_0004 и в таком роде, сейчас разбираюсь, как средствами stimulsofta превратить это в читаемый текст, может вы подскажете

Re: Не выводится rtf в отчёт

Добавлено: 11 июн 2020, 00:56
Ivan
Здравствуйте.
Стали выводится знаки в hex кодировке PK _x0003_0004 и в таком роде, сейчас разбираюсь, как средствами stimulsofta превратить это в читаемый текст, может вы подскажете
Символы "PK _x0003_0004" означают, что у вас исходное значение в базе заархивировано в zip, как и картинки.
Поэтому надо использовать также кусок кода из первого поста, который разархивирует из zip-архива.

Спасибо.

Re: Не выводится rtf в отчёт

Добавлено: 23 июн 2020, 09:52
SergeyPerm
Доброе утро.

Почему то когда я все сделал распаковал потом из base64 перевел, выходит пустая строка

Re: Не выводится rtf в отчёт

Добавлено: 24 июн 2020, 16:55
Aleksey
Здравсвтуйте,

Вышлите пример данных для анализа.

Спасибо.

Re: Не выводится rtf в отчёт

Добавлено: 02 июл 2020, 13:21
SergeyPerm
Добрый день

Прикладываю файл с зашифрованы файлом который хранится в бд и сам отчет в котором пытаюсь строку реализовать и вывести

Re: Не выводится rtf в отчёт

Добавлено: 02 июл 2020, 14:54
HighAley
Здравствуйте.

Судя по тому. что вы прислали, данный файл не полный. Он обрезан и его размер 65535.
После конвертации из Base64 мы видим, что получился ZIP-архив, внетри которого храниться PDF файл с именем "Инф. письмо КТТК Красноярск 2020-2021.pdf".
Далее не можем с ним ничего сделать, так как файл обрезан.

В любом случае это не RichText и он не может быть использован в нашем продукте.

Спасибо.