|
Форматированный документ, 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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |