Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Форматированный документ, Print Screen, вставка из буфер

Форматированный документ, Print Screen, вставка из буфер
Я
   Geroy
 
27.08.20 - 15:38
Всем привет.

1. Выполнена команда Print Screen и вставка с буфера в форматированный документ.
2. Картинка отобразилась в форматированном документе.
3. Строка картинки очень похожа на строку base64 но не она,  
   так как любые попытки перевести строку в двоичные данные и сохранения уже как картинки в файл были безуспешны.
4. Пример: ФД.ПолучитьЭлементы(), КартинкаФорматированногоДокумента, Строка = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAP-........"

5. Также
Вложения = Новый Структура();
ФД.ПолучитьHTML(Текст, Вложения);

вернул пустую структуру вложений

Вопрос: что за формат строки и как перевести в двоичные данные и сохранить как картинку?
   Geroy
 
1 - 28.08.20 - 10:00
Проблема в том, что картинка с форматированного документа попадет в html, а из него в печатную форму.
   acht
 
2 - 28.08.20 - 10:11
Судя по всему это таки png в base64.
Возьми строку после ";base64,", выровняй длину и получи из нее двоичные данные.
   Geroy
 
3 - 28.08.20 - 10:29
(2) Что значит выровнять длину?
1. Пробовал взять всё после запятой и загнать двоичные данные, получаю Неопределено
2. Если беру с запятой получаю тип двоичные данные, но значение пусто
3. Если беру всю строку в base64Значение получаю тип двоичные данные и значение заполнено, но при сохранении на диск битый файл.
   Geroy
 
4 - 28.08.20 - 10:45
Еще заметил что строка содержит "-" и "_", именно если принт скрин и сразу вставить в форматированный документ
   acht
 
5 - 28.08.20 - 10:47
(3) Длина строки должна быть кратна 4. Дополняется символами =
   acht
 
6 - 28.08.20 - 10:51
(4) А "-" и "_" - это скорей всего надо поменять на "/" и "+". Какой-то вариант base64 для урлов
   Geroy
 
7 - 28.08.20 - 10:57
(5) не помогло
(6) вот и у меня подозрения, так как когда вставляешь картинку не из буфера, то данные символы отсутствуют
   Geroy
 
8 - 28.08.20 - 11:00
(6)
По причине этого существует изменённый Base64 для URL, где не используется заполнение символом = и символы + и / соответственно заменяются на * и -, так что использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах и идентификаторах объекта вообще. Стандартом Base64-кодирования URL адресов признается вариант, когда символы + и / заменяются, соответственно, на - и _ (RFC 3548, раздел 4).
   Geroy
 
9 - 28.08.20 - 11:21
Замена не помогла, и выравнивание кратно 4 тоже не помогло

"-" на "+"
"_" на "/"
   PloAl
 
10 - 28.08.20 - 12:03
(9) Получите из существующего *.png строку base64 в форматированном документе.
Проделайте такую же операцию не в 1с на другом ЯП или с помощью онлайн конвертера.
И сравните получившиеся строки.
   Geroy
 
11 - 28.08.20 - 12:04
(7) Спасибо, получилось.
Помог понять принцип этот сервис __http://www.base64url.com/

Для каждого стр из НовыйКомментарий.ПолучитьЭлементы() Цикл
        Если Тип(Стр) = Тип("КартинкаФорматированногоДокумента") Тогда
            Если Найти(Стр.Картинка,"base64")> 0 тогда
                
                СтрокаКартинка = Стр.Картинка;
                
                НачалоФормата =  Найти(СтрокаКартинка, "image/")+СтрДлина("image/");
                КонецФормата  =  Найти(СтрокаКартинка,";");
                ФорматИзображения = Сред(СтрокаКартинка,НачалоФормата, КонецФормата - НачалоФормата);
                
                БезНачала = Сред(Стр.Картинка,Найти(Стр.Картинка, "base64,")+СтрДлина("base64,"));
                
                БезНачала = СтрЗаменить(БезНачала, "-", "+");
                БезНачала = СтрЗаменить(БезНачала, "_", "/");
                
                ДлинаСтроки = СтрДлина(БезНачала) / 4;
                
                Пока ДлинаСтроки <> Цел(ДлинаСтроки) цикл
                        
                   БезНачала = БезНачала +"=";
                   ДлинаСтроки = СтрДлина(БезНачала) / 4; 
                    
                КонецЦикла;    
                                
                БС = Base64Значение(БезНачала);
                
                ИмяФайла = ПолучитьИмяВременногоФайла(ФорматИзображения);
                        
                БС.Записать(ИмяФайла);
                
            КонецЕсли;                
        КонецЕсли;        
    КонецЦикла;
   Garykom
 
12 - 28.08.20 - 12:08

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.