gifts2017

Сканируем без сканера или MXL to JPG

Опубликовал Александр Шакмаев (shakmaev) в раздел Печать - Печатные формы документов

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

Предисловие.

Многим компаниям, продающим, в основном, через интернет-магазин, приходится высылать своим клиентам счета на оплату по электронной почте. Для этого они печатают счет, несут его на подпись, ставят печать и, наконец, сканируют готовый к отправке документ.

Весь процесс в среднем занимает около 5 минут, что при обороте компании в 8000 счетов в год с отделом продаж из 4 человек и 8 часовом рабочем дне, путем нехитрых вычислений может обернуться в месяц работы. То есть, если бы менеджеры занимались только сканированием счетов, то у них на это ушел бы почти месяц! Теперь посчитайте, сколько компания платит за месяц работы четырем менеджерам.

Рождение идеи.

После всего вышесказанного приходит только одна мысль - как ускорить этот процесс. Сначала мы просто сохраняли документ в формат Excel с вшитыми внутрь изображениями печатей и подписей. Однако, вскоре, стало ясно, что некоторые клиенты не могут открыть столь популярный формат xls. Тогда пришла в голову мысль: JPG - один из самых распространенных форматов изображений в мире - нужно использовать его.

Технология работы.

Ничего нового я не придумал, однако я решил, что стоит об этом написать. Скачиваем и устанавливаем виртуальный принтер "PDFCreator". Чтобы наши отсканированные документы имели печать и подпись, необходимо вставить их оригинал в формате PNG в макеты нужных документов, и самое главное, установите свойство "Выводить на печать=ЛОЖЬ", чтобы простой вывод на принтер был без лишнего мусора. Теперь, чтобы все заработало, открываем Конфигуратор -> Общие формы -> ПечатьДокументов. Создаем кнопку "Сканировать". Далее в обработке события по нажатию пишем следующий код:  

//Разрешаем вывод печатей и подписей
ЭлементыФормы.ПолеТабличногоДокумента.Защита = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(1).ВыводитьНаПечать = Истина; //Печать
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(0).ВыводитьНаПечать = Истина; //Подпись 1
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(2).ВыводитьНаПечать = Истина; //Подпись 2

Попытка
 PDFCreator = Новый ComОбъект("PDFCreator.clsPDFCreator");
 PDFCreator.cStart("/NoProcessingAtStartup" );
 PDFCreator.cClearcache();
 PDFCreator.cPrinterStop = false;
 
//PDFCreator.cDefaultprinter = "PDFCreator";
 Если Не PDFCreator.cProfileExists("Печать 1С") Тогда
  
PDFCreator.cAddProfile("Печать 1С", PDFCreator.cStandardOptions);
 КонецЕсли;
 ///Настройки
 PDFCreatorOptions = PDFCreator.cReadOptions("Печать 1С");
 //PDFCreatorOptions.NoConfirmMessageSwitchingDefaultprinter = Истина;
 PDFCreatorOptions.UseAutosave = 1;
 PDFCreatorOptions.UseAutosaveDirectory = 1;
 PDFCreatorOptions.AutosaveFormat = 2;
 PDFCreatorOptions.AutosaveDirectory = "С:\Temp_1C\";
 PDFCreatorOptions.AutosaveFilename = "document";
 PDFCreatorOptions.JPEGResolution = 200; //dpi
 PDFCreatorOptions.JPEGQuality = 100; //коэффициэнт качества


 PDFCreatorOptions.AutosaveStartStandardProgram = 0;
 PDFCreator.cSaveOptions(PDFCreatorOptions,"Печать 1С");
 PDFCreator.cOptionsProfile = "Печать 1С";
 PDFCreator.cOptions = PDFCreatorOptions;
 //процесс "сканирования"
 ЭлементыФормы.ПолеТабличногоДокумента.ИмяПринтера = Принтер.Item(1);
 ЭлементыФормы.ПолеТабличногоДокумента.Напечатать();
 //*********************
Исключение
 
Сообщить("Ошибка");
КонецПопытки;

//Снова запрещаем вывод на печать рисунков
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(1).ВыводитьНаПечать = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(0).ВыводитьНаПечать = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(2).ВыводитьНаПечать = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Защита = Истина;
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Истина;

Готово. Наш документ отсканирован и сохранен по адресу C:\Temp_1C\document.jpg. Можем его смело отправлять по почте.

Бонус.

Вообще говоря, я немного усовершенствовал эту систему, добавив функцию автоматической отправки почты уже с вложенным "сканом" документа. Для этого вам нужно воспользоваться вот этой обработкой - ее необходимо вставить в конфигурацию и назвать СоздатьПисьмо. Теперь немного добавим к вышеописанному коду:

Форма = Обработки.СоздатьПисьмо.Создать().ПолучитьФорму();
Подпись = "Стандартная подпись".

Форма.ЭлементыФормы.ПолеТекст.УстановитьТекст(Подпись);
Форма.Тема = "Счет на оплату.";
Форма.ОткрытьМодально();

Теперь, в коде основной формы обработки "СоздатьПисьмо" пишем:

Процедура ПриОткрытии()
 
Сообщ = Новый ПочтовоеСообщение;
 
Предупреждение("Сканируем... Не закрывайте это окно!",15);  //Даем время чтобы PDFCreator успел отсканировать
 
Строка = Вложения.Добавить();
 
Строка.ИмяФайла = "document.jpg";
 
Строка.Путь = "C:\Temp_1C\document.jpg";
КонецПроцедуры

На этом все. Теперь, при нажатии созданной нами кнопки, документ будет автоматически сканироваться и вставляться во вложения отправляемой почты. Вам необходимо только дописать текст и добавить схему проезда во вложения.

Надеюсь, кому-то статья пригодится.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Трактор Трактор (Трактор) 24.05.12 12:38
А если web клиент и сервер на линуксе?
2. cruze (shakmaev) 24.05.12 12:50
Обращаю внимание что в статье я пишу о использовании PDFCreator, или эта программа кроссплатформенная?
3. ediks (ediks) 24.05.12 13:28
(0)
1) Можно не создавать профиль в реестре. Все равно все настройки в коде устанавливаются. Я, по крайней мере, так делаю.
2) Можно сделать выбор в каком формате сохранять, например, .PDF. Тогда конвертация будет более универсальной.

Что-нибудь вроде этого:

		ОбъектПринтер.cVisible = ЛОЖЬ;
		Опции = ОбъектПринтер.cReadOptions();
		Опции.ShowAnimation = 0;
		Опции.UseAutosave=1; // автосохранение
		Опции.StartStandardProgram = 0;	// все равно программа не запускается (работает только в случае, если установить этот флаг непосредственно в PDFCreator)
		Опции.UseAutosaveDirectory = 1; // сохранять в
		Опции.AutosaveDirectory = Каталог;  // путь автосохранеия
		Опции.AutosaveFilename = ФайлПечати; // имя файла
		Опции.AutosaveFormat = 0;    // формат - PDF
		Опции.PDFUseSecurity = 1; // защита PDF
		Опции.PDFAes128Encryption = 1;
		Опции.PDFOwnerPass = 1;
		Опции.PDFOwnerPasswordString = Строка(Новый УникальныйИдентификатор);//значение пароля 
		Опции.PDFDisallowCopy = 1; // защита PDF
		Опции.PDFDisallowModifyContents = 1; // защита PDF
		Опции.DisableEmail = 1;
		Опции.PDFDisallowModifyAnnotations = 1;
		Опции.PDFDisallowPrinting = 1;
		ОбъектПринтер.cOptions = Опции;
		ОбъектПринтер.cDefaultprinter = PDFCreator;
		ОбъектПринтер.cClearcache();
		ОбъектПринтер.cPrinterStop = Истина;//остановим, пока не получены все задания на печать
...Показать Скрыть
4. Евгений Шабалин (xzorkiix) 25.05.12 14:26
(1) Трактор,

А если web клиент и сервер на линуксе?


Сохранять в pdf ТабличныйДокумент на стороне сервера средствами платформы.
http://www.forum.mista.ru/topic.php?id=593294

В случае серверной стороны на Win, то предложенный здесь метод будет работать - выполнять, повторюсь, на стороне сервера.
Азбука Морзе; +1 Ответить
5. Алексей Прилепский (IamAlexy) 27.05.12 00:39
Хорошо что у меня платформа 8.2 а не 8.2 которая у автора стоит и про которую автор пишет
я могу штатно все печатные формы в PDF сохранять...
6. cruze (shakmaev) 27.05.12 18:38
Хочу обратить внимание что JPG гораздо популярнее PDF, в связи с этим пользователю не нужно скачивать Adobe Reader или иное ПО для чтения PDF.
7. Алексей Прилепский (IamAlexy) 27.05.12 22:16
(6) где джипег популярнее?
стандарт де факто - пдф

не говоря уже о том что работая с пдф при решении основной задачи "нередактируемость сохраненного макета" вы получаете
1. стандартный формат
2. выгрузку из любых режимов (толстый тонкий и веб)
3. возможность клиенту копировать куски текста из этого самого ПДФ

а п.3 очень и очень важен.
он означает что ваш клиент получив счет от не матерится на безмозглых дурачков которые ему прислали идиотский скан с которого все реквизиты приходится перебивать с клавиатуры а нормально через копировать/вставить все номера счетов, ИННы и прчие БИКи в свою базу копирует.
dkprim; Zebar; echo77; Dimasik2007; vital1c; Slotty; CatMix; Brawler; Varies; Il; savflint; demon642@mail.ru; RayCon; +13 Ответить 3
8. cruze (shakmaev) 28.05.12 09:51
(7) IamAlexy, возможно, вы правы, я всего лишь описал еще одну возможность упрастить жизнь менеджера. Дело стоит за малым использовать то, что написано в этой статье, либо в 8.2 сохранить в PDF. Никто никого не заставляет=) Поэтому споры тут нецелесообразны. Еще раз обращаю внимание что статья не о MXL to PDF, а MXL to JPG.
savflint; +1 Ответить
9. flint alex (savflint) 29.05.12 12:31
спасибо за труды. очень пригодилось.
10. Сергей (Che) Коцюра (CheBurator) 30.05.12 03:49
все равно все эти решения через виртуальные принтера - через задницу. д.б. тупо и просто, типа как экспорт в пдф в либре или kingoffice
11. Александр МАН (1977) 30.05.12 11:36
pdf принтером пользуемься 5 лет. Полет нормальный.
savflint; +1 Ответить
12. Юрий Лазаренко (TitanLuchs) 08.06.12 10:35
А в "отсканированный" таким образом документ можно вставить печать и подпись в нужное место? Если их прилепить на печатную форму они подхватятся этой обработкой?
13. cruze (shakmaev) 08.06.12 12:08
(12) TitanLuchs, несомненно! В статье я привожу пример как я использовал реализацию данного метода под себя
ЭлементыФормы.ПолеТабличногоДокумента.Защита = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(1).ВыводитьНаПечать = Истина; //Печать
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(0).ВыводитьНаПечать = Истина; //Подпись 1
ЭлементыФормы.ПолеТабличногоДокумента.Рисунки.Получить(2).ВыводитьНаПечать = Истина; //Подпись 2


То есть в макете у меня есть 3 картинки, но они не выводятся на печать. Когда я начинаю их "сканировать", то делаю их доступными для печати.
14. Александр Шишкин (Шёпот теней) 08.06.12 15:51
... хм ...

в целом идея понравилась ... к тому же: Надо было - СДЕЛАЛ !!!

... а кто мешает использовать HTML тОООже ...

... недооценённый формат и читается "всем чем хочешь"... текстовый формат - хорошо "ужимается" в архив ...

... вот ...
15. cruze (shakmaev) 09.06.12 12:26
(14) Шёпот теней, к слову о HTML могу отметить небольшой, но очень неудобный минус - печати и подписи будут храниться отдельно в файлах. Это я к тому, что картинки там только в <img>
16. Александр Шишкин (Шёпот теней) 09.06.12 15:28
(15) ... сОгласен ...

не вижу в этом большого неудобства ... зато в одном архиве ... ))) ...

... впрочем, о вкусах не спорят ... путей много ... )))

... вотУДАЧИвот ...
17. Ийон Тихий (cool.vlad4) 09.06.12 15:39
(15) вообще-то картинки можно внедрить в сам html как base64 данные и не будет никаких файлов отдельных , вот так
<img src="data:image/gif;base64, здесь base64 data>

у html другой минус, с ним затрахаешься, чтобы он нормально отображался так как есть, разные браузеры, разная поддержка html привела к бардаку, с которым не очень хочется связываться, если ты не дизайнер html (я вот не дизайнер), то колонки будут не той ширины, то ячеки будут сдвинуты, ну его нафиг. html хорош для сайтов.
Rustig; orefkov; Шёпот теней; shakmaev; +4 Ответить 1
18. Александр Шишкин (Шёпот теней) 26.06.12 11:28
(17) ... у 1С свой читальщик html ...

п.с. "html хорош для сайтов" ... однако XML пользуемся и ничего (в принципе то же самое) ... ну а браузеры лишь повторяют войну стандартов ...

... вотПРОСТОвот ...

...
19. БИЗНЕС РЕШЕНИЯ (Para_1987) 08.07.12 12:49
20. г. Казань Рустем Гумеров (Rustig) 09.07.12 14:26
(6), (7) я конвертирую счета в формат .png.
потому что в pdf я не смог обойти такую проблему: у меня печать и подпись можно скопировать из создаваемого pdf,
а из png нельзя. И это при установленной защите от копирования текста...
И надо сказать, что база на платформе 8.1.
21. г. Казань Рустем Гумеров (Rustig) 09.07.12 14:31
(16) кто ж тебе из клиентов позволит пересылать подписи и печать в готовом виде? это ж подстава...
а ведь речь в большинстве случаев о том, как подписанный счет да с подписью переслать контрагенту... ;)
22. г. Казань Рустем Гумеров (Rustig) 09.07.12 14:37
(0) название статьи не соответствует содержимому.
читатель обманывается, хоть и не замечает этого.
Вы не сканируете, вы конвертируете форматы. Это первое замечание.
Второе, неужели вы не использовали следующие статьи?
http://infostart.ru/public/75969/
http://infostart.ru/public/20710/
По-моему, ссылка на первоисточник должна быть.
23. cruze (shakmaev) 09.07.12 14:46
(22) Rustig, обращаю внимание что сканировать без сканера в принципе невозможно. Первая часть названия статьи передает сущность написанного, а вторая часть после слова "или" раскрывает технический смысл написанного.

Писал статью опираясь исключительно на свой опыт, а найти информацию о технологии можно по всему интернету. В статье я делаю акцент именно на идею использования технологии.
24. Алексей Прилепский (IamAlexy) 09.07.12 17:13
(20) надо будет взять твою печать и подпись: возьму фотошоп и за 5 минут вырежу...
это вообще не проблема..
25. Алексей Прилепский (IamAlexy) 09.07.12 17:15
(21) есть конторы которы НЕ платят по счету даже если это аванс без печати и подписи
подавай им хотя бы сканкопию или по факсу но чтобы была печать и подпись.
Понятное дело - они потом оригинал затребуют всегда, но для оплаты аванса им таких "отсканированных" печати и подписи за глаза хватает
26. Denis Zuev (Varies) 10.07.12 07:45
Помоему самый удобный вариант это сохранить сразу в PDF, поддерживаю (7)
27. Stamper (Stamper) 10.07.12 17:36
хорошо, что 1С уже из коробки может сохранять табличный документ в PDF
28. marat_n q (marat_n) 11.07.12 12:38
В (22) правильно сказано, что по сути всё уже было тут на инфостарте. Единственное отличие - jpg, но это как раз не самое удачное, решение. PDF всё-таки правильней. Во-первых, картинки обычно корпоративной почтой режутся чаще, чем PDF-ки (да и шанс под спам-фильтр попасть у клиента с jpg-ом при авторассылке скорее всего выше). Во-вторых, нормальная распечатка PDF-файла гораздо проще, чем jpg, особенно, если документ будет на несколько страниц. Ну и как правильно заметили, текст из jpg не копируется. Да и кстати, jpg для передачи картинок с текстом изначально не предназначен.

А вот по поводу использования виртуальника, а не встроенного конвертора, к сожалению вопрос актуальный для многих. Поддержка pdf появилась насколько я помню только в 8.2.15, а далеко не все на эту платформу перешли из-за того, что необходимо конвертить базу, решать проблемы совместимости и прочее.
30. Евгений Мартыненков (JohnyDeath) 20.07.12 13:47
(5), (26), (27)
Родная сохранялка в PDF работает не всегда правильно. Если кто не верит - могу показать.
Вирт. принтер тоже не могу использовать, т.к. его надо устанавливать.
Пока остановился на Yoksel-е, но там тоже проблема нарисовалась.

Неужели не существует ВК, которая преобразовывает MXL в jpg/png/pdf? (pdf хотя бы как картинка)
31. Олег Шалимов (CaSH_2004) 01.02.13 13:55
(0) Статья полезная, вот только не для документов, кстати а почему автор указан как "(shakmaev) Александр Шакмаев" а отписывается как "cruze"? Это конспирация или что?
(30) Любопытно какие проблемы есть, поделитесь?
(21) Дают, и еще и просят. Кто хочет тот и из png все что нужно вырежет как уже сказал (24)
Я тоже больше за PDF в силу его простоы
32. Александр Шакмаев (shakmaev) 01.02.13 14:05
(31) CaSH_2004, это глюк сайта. Я изменил логин, в комментариях почему то он не поменялся.
33. Андрей Пляскин (Lyas) 04.02.13 14:13
Что за переменная Принтер здесь -
ЭлементыФормы.ПолеТабличногоДокумента.ИмяПринтера = Принтер.Item(1);
у меня не работает.
34. Александр Шакмаев (shakmaev) 13.02.13 17:13
(33) Lyas, пишу по памяти потому как модуль уже переделал. Переменная принтер тут отвечает за список установленных принтеров в системе, а Item(1) в свою очередь указывает на конкретный принтер этого списка. Такова была специфика.
35. Роман Ложкин (webester) 11.04.13 14:14
На тему jpg vs pdf, мне тоже кажется что по факту должен быть pdf, pdf в хорошем качестве может быть 100-200 килобайт, jpg никогда.
36. Галина Орехова (orehova123) 15.04.13 06:36
хых! народ активно продает такие разработки по 1000-2000 (зависит от навороченности), а тут вот вам - открытый код ))))
37. Алексей (alexqc) 15.04.13 19:37
(15) cruze,
1. Есть формат mht (МСовский "веб-архив") - весь html одним файлом. Сделать его из страницы в принципе не сложно: сам формат соответствует MIME секционному файлу, похожим образом файлы писем формируются (подробнее тут, хотя и замудрено, проще сохранить страницу как mht и посмотреть внутрь - все понятно будет). Поддерживается (естественно!) MSIE, оперой, вроде с недавнего времени - хромом, а лисой - только с соотв. расширением. Если целевой получатель пользуется ИЕ - вполне пойдет.

2. Более интересная вещь: есть протокол "встроенных данных" (data), может быть использован в любом источнике данных (src) html-документа. Выглядит так: "data:<ТипДанных>;<ТипКодировки>,<Данные>", где <ТипДанных> - MIME-тип данных, "<ТипКодировки>,<Данные>" - соответственно текстовое представление данных (в случае двоичных данных - лучше всего в base64) - подробнее тут.

То есть для картинок будет где-то так:
"data:image/jpeg;base64,"+Base64Строка(ДвоичныеДанные_Из_Файла_Картинки) .

Ограничение - встраиваемый объект не может превышать 32К.

Доб.: Увидел (17) после написания поста
38. Алексей (alexqc) 15.04.13 19:49
(20) Rustig, А кто помешает желающему печать-подпись скопировать непосредственно из рисунка? Сложнее чем копи-паст, но не недоступно. ИМХО, тут разве что наложение "водяного знака" через весь документ с печатью поможет, либо надпись на печати некоего уникального кода именно этого документа.
39. Алексей (alexqc) 15.04.13 19:57
(35) webester, это зависит от pdf. Поскольку в pdf может сохраняться текст как текст, такой pdf будет меньше jpg, в котором этот текст будет тем же рсунком (да и полезные возможности типа копирования текста будут). Ну а если в pdf текст как рисунок сохранить - будет и больше jpg. Кстати, jpg как формат рисунка для текстов - не лучший вариант.
40. Юленька (s_uu) 18.04.13 17:26
Считаю, что pdf самый удобный формат для рассылки счетов. С остальными форматами мороки больше!
41. Роман Ложкин (webester) 21.04.13 15:00
(39)Сканировали в pdf не распознавая, размер получался меньше в разы, чем в jpg. А в случае с печатью из 1С там вообще текст при любом раскладе, то есть размер гарантировано меньше.
42. Александр Шакмаев (shakmaev) 22.04.13 09:22
(41) webester,
1. На момент написания статьи в платформе 1С еще не был реализован метод сохранения документов в формат pdf.
2. Формат JPG открывается стандартными средствами Windows, Mac, Linux, именно поэтому в моем случае был выбран формат изображения.

p.s. Сейчас уже используем PDF потому как клиентам удобно копировать оттуда реквизиты для оплаты.
43. Роман Ложкин (webester) 22.04.13 16:31
На момент написания статьи в платформе 1С еще не был реализован метод сохранения документов в формат pdf

Ваш метод сам по себе строится на pdf принтере. О чем вы? То есть возможность печати в файл и в пдф в том числе, это обязательное условие вашего решения.
Формат JPG открывается стандартными средствами Windows, Mac, Linux, именно поэтому в моем случае был выбран формат изображения
Тут вы все таки правы, но я все равно бы выбрал PDF, в силу того что он уже давно стандарт для электронного документа, бесплатные реализации читалок pdf есть для любой ОС. Не надо тормозить прогресс. Так и до блокнота можно докатиться. Когда заходит речь о установке\переустановке ОС, постоянно слышу:
%Name% не забудь программу поставить, что бы счета из электронки открывались ну эту... ну ты понял
:) То есть это норма читалка пдф и уже давно.
44. Александр Шакмаев (shakmaev) 22.04.13 17:01
(43) webester,
А в случае с печатью из 1С там вообще текст при любом раскладе, то есть размер гарантировано меньше.


*я об этом неуместном комментарии

:) То есть это норма читалка пдф и уже давно.


Можем спорить бесконечно о популярности форматов, их хороших и плохих качествах, как было выше в комментариях.
Однако, говоря о нормах, еще есть люди, способные при замене у них монитора задавать вопрос: "А пароль от Виндус сменился?", и это далеко не предел.
45. Роман Ложкин (webester) 26.04.13 06:06
(44)
Однако, говоря о нормах, еще есть люди, способные при замене у них монитора задавать вопрос: "А пароль от Виндус сменился?", и это далеко не предел.

Так можно и до динозвра за монтором дойти начать решать вопрос, что у него когти к стандартной клавиатуре не подходят. Должны быть рамки разумного.
46. Андрей Штоколов (Alfer) 16.01.14 19:44
идея - супер - поддерживаю спасибо автору за труд
47. Ийон Тихий (cool.vlad4) 16.01.14 20:04
(18) Шёпот теней, прошу прощения за супер поздний ответ (просто у меня в почте письма от ИС в спам попадают, а я не особо парюсь, уж больно много писем от ИС). нет никакой разницы в контексте веба html или xml, xml также будет отображаться по разному, это не от формата зависит, а от поддержки и совместимости браузеров. вон я открывал rsdn, что там такого сложного в верстке сайта? в IE один вид и даже цвет, в хроме другой. Там xml хочу заметить.(в статьях по крайнем мере). А рендеринг шрифтов? Просто имеется в виду наверное xml собственной разметки, не вебовской. Ну тогда о чем речь, html в этом случае ничем не отличается от xml, сделайте достройку дерева в html до xml и отображайте xml так как вам надо.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа