| 
    
        
     
     | 
    
  | 
Форматированный документ, Print Screen, вставка из буфер | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Geroy    
     27.08.20 
            ✎
    15:38 
 | 
         
        Всем привет. 
 
        1. Выполнена команда Print Screen и вставка с буфера в форматированный документ. 2. Картинка отобразилась в форматированном документе. 3. Строка картинки очень похожа на строку base64 но не она, так как любые попытки перевести строку в двоичные данные и сохранения уже как картинки в файл были безуспешны. 4. Пример: ФД.ПолучитьЭлементы(), КартинкаФорматированногоДокумента, Строка = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAP-........" 5. Также Вложения = Новый Структура(); ФД.ПолучитьHTML(Текст, Вложения); вернул пустую структуру вложений Вопрос: что за формат строки и как перевести в двоичные данные и сохранить как картинку?  | 
|||
| 
    1
    
        Geroy    
     28.08.20 
            ✎
    10:00 
 | 
         
        Проблема в том, что картинка с форматированного документа попадет в html, а из него в печатную форму.     
         | 
|||
| 
    2
    
        acht    
     28.08.20 
            ✎
    10:11 
 | 
         
        Судя по всему это таки png в base64.
 
        Возьми строку после ";base64,", выровняй длину и получи из нее двоичные данные.  | 
|||
| 
    3
    
        Geroy    
     28.08.20 
            ✎
    10:29 
 | 
         
        (2) Что значит выровнять длину?
 
        1. Пробовал взять всё после запятой и загнать двоичные данные, получаю Неопределено 2. Если беру с запятой получаю тип двоичные данные, но значение пусто 3. Если беру всю строку в base64Значение получаю тип двоичные данные и значение заполнено, но при сохранении на диск битый файл.  | 
|||
| 
    4
    
        Geroy    
     28.08.20 
            ✎
    10:45 
 | 
         
        Еще заметил что строка содержит "-" и "_", именно если принт скрин и сразу вставить в форматированный документ     
         | 
|||
| 
    5
    
        acht    
     28.08.20 
            ✎
    10:47 
 | 
         
        (3) Длина строки должна быть кратна 4. Дополняется символами =     
         | 
|||
| 
    6
    
        acht    
     28.08.20 
            ✎
    10:51 
 | 
         
        (4) А "-" и "_" - это скорей всего надо поменять на "/" и "+". Какой-то вариант base64 для урлов     
         | 
|||
| 
    7
    
        Geroy    
     28.08.20 
            ✎
    10:57 
 | 
         
        (5) не помогло 
 
        (6) вот и у меня подозрения, так как когда вставляешь картинку не из буфера, то данные символы отсутствуют  | 
|||
| 
    8
    
        Geroy    
     28.08.20 
            ✎
    11:00 
 | 
         
        (6) 
 
        По причине этого существует изменённый Base64 для URL, где не используется заполнение символом = и символы + и / соответственно заменяются на * и -, так что использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах и идентификаторах объекта вообще. Стандартом Base64-кодирования URL адресов признается вариант, когда символы + и / заменяются, соответственно, на - и _ (RFC 3548, раздел 4).  | 
|||
| 
    9
    
        Geroy    
     28.08.20 
            ✎
    11:21 
 | 
         
        Замена не помогла, и выравнивание кратно 4 тоже не помогло
 
        "-" на "+" "_" на "/"  | 
|||
| 
    10
    
        PloAl    
     28.08.20 
            ✎
    12:03 
 | 
         
        (9) Получите из существующего *.png строку base64 в форматированном документе. 
 
        Проделайте такую же операцию не в 1с на другом ЯП или с помощью онлайн конвертера. И сравните получившиеся строки.  | 
|||
| 
    11
    
        Geroy    
     28.08.20 
            ✎
    12:04 
 | 
         
        (7) Спасибо, получилось. 
 
        Помог понять принцип этот сервис __http://www.base64url.com/ Для каждого стр из НовыйКомментарий.ПолучитьЭлементы() Цикл Если Тип(Стр) = Тип("КартинкаФорматированногоДокумента") Тогда Если Найти(Стр.Картинка,"base64")> 0 тогда СтрокаКартинка = Стр.Картинка; НачалоФормата = Найти(СтрокаКартинка, "image/")+СтрДлина("image/"); КонецФормата = Найти(СтрокаКартинка,";"); ФорматИзображения = Сред(СтрокаКартинка,НачалоФормата, КонецФормата - НачалоФормата); БезНачала = Сред(Стр.Картинка,Найти(Стр.Картинка, "base64,")+СтрДлина("base64,")); БезНачала = СтрЗаменить(БезНачала, "-", "+"); БезНачала = СтрЗаменить(БезНачала, "_", "/"); ДлинаСтроки = СтрДлина(БезНачала) / 4; Пока ДлинаСтроки <> Цел(ДлинаСтроки) цикл БезНачала = БезНачала +"="; ДлинаСтроки = СтрДлина(БезНачала) / 4; КонецЦикла; БС = Base64Значение(БезНачала); ИмяФайла = ПолучитьИмяВременногоФайла(ФорматИзображения); БС.Записать(ИмяФайла); КонецЕсли; КонецЕсли; КонецЦикла;  | 
|||
| 
    12
    
        Garykom    
     гуру 
    28.08.20 
            ✎
    12:08 
 | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |