// Процедуры и функции &НаКлиенте Процедура ОбновитьТекстБраузера(ТекАдресФайлаВХранилище) Если ЭтоТест Тогда // {{ Для теста ОбновитьТекстБраузера_Тест(ТекАдресФайлаВХранилище); // }} Для теста Иначе Браузер = ?(ЭтоВебКлиент, ТекАдресФайлаВХранилище, "file:///" + СтрЗаменить(ПутьКФайлуPDF, "\", "/")); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СозданиеДвоичныхДанныхИзФайлаЗавершение(ДвоичныеДанные, ДополнительныеПараметры) Экспорт ТекАдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор); ОбновитьТекстБраузера(ТекАдресФайлаВХранилище); Если ЭтоТест Тогда Если Не ЭтоВебКлиент Тогда // {{ Для теста ПутьКФайлу_HTML = "" + ПутьКФайлуPDF + ".html"; ПараметрыЗаписиТекстовогоДокумента = Новый Структура; ПараметрыЗаписиТекстовогоДокумента.Вставить("ПутьКФайлу", ПутьКФайлу_HTML); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст(Браузер); ТекстовыйДокумент.НачатьЗапись(Новый ОписаниеОповещения("ПослеНачалаЗаписиТекстовогоДокумента", ЭтотОбъект, ПараметрыЗаписиТекстовогоДокумента), ПутьКФайлу_HTML); // }} Для теста КонецЕсли; КонецЕсли; КонецПроцедуры // {{ Для теста #Область Тест &НаКлиенте Процедура ОбновитьТекстБраузера_Тест(ТекАдресФайлаВХранилище) // Формирование может быть вынесено на сервер (при необходимости использования в регламентных и фоновых заданиях) ТекУникальныйИдентификатор = СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); Если ЭтоВебКлиент Тогда Браузер = "<!DOCTYPE html> |<html> |<head> |<meta charset='utf-8'> |<meta name='viewport' content='width=device-width, initial-scale=1.0'> |<meta http-equiv='X-UA-Compatible' content='IE=edge'> |<style>html,body{margin:0;padding:0;} iframe{width:100%;height:99.4vh;border:none;}</style> |</head> |<body id='" + ТекУникальныйИдентификатор + "'> |<iframe src='" + ТекАдресФайлаВХранилище + "'></iframe> |</body> |</html> |"; Иначе Браузер = "<!DOCTYPE html> |<html> |<head> |<meta charset='utf-8'> |<meta name='viewport' content='width=device-width, initial-scale=1.0'> |<meta http-equiv='X-UA-Compatible' content='IE=edge'> |<style>html,body{margin:0;padding:0;} embed, iframe{width:100%;height:99.4vh;border:none;} button {display: inline-block;border-radius: 2px;color: #4b4b4b;font-family: Arial;font-size: 10pt;position: relative;margin: 0;vertical-align: top;word-spacing: normal;box-sizing: border-box;border: 1px solid rgba(0,0,0,0.3);border-bottom-color: rgba(0, 0, 0, 0.3);border-bottom-color: rgba(0,0,0,0.4);background-color: #fff;box-shadow: 0 1px 0 0 rgba(0,0,0,0.2);height: 27px;}</style> |<script> |var fileName = '" + ?(ЗначениеЗаполнено(ИмяФайлаPDF), ИмяФайлаPDF, "document.pdf") + "'; |var data='" + СтрЗаменить(Base64Строка(ПолучитьИзВременногоХранилища(ТекАдресФайлаВХранилище)), Символы.ВК + Символы.ПС, "") + "'; |var byteCharacters = atob(data); |var byteNumbers = new Array(byteCharacters.length); |for (var i = 0; i < byteCharacters.length; i++) { | byteNumbers[i] = byteCharacters.charCodeAt(i); |} |var byteArray = new Uint8Array(byteNumbers); |var blob = new Blob([byteArray], {type: 'application/pdf'}); |function openPDF(blob, fileName) { | window.navigator.msSaveOrOpenBlob(blob, fileName); |} |window.onload = function() { |if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE workaround | document.body.innerHTML = ""<br><br><br><center><button fileName)'>Просмотреть - "" + fileName + ""</button></center>""; |} |else { // much easier if not IE | document.body.innerHTML = ""<iframe src='"" + window.URL.createObjectURL(blob) + ""'></iframe>""; |} |} |</script> |</head> |<body id='" + ТекУникальныйИдентификатор + "'> |</body> |</html> |"; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеНачалаЗаписиТекстовогоДокумента(Результат, ДополнительныеПараметры) Экспорт Если Результат Тогда Если ДополнительныеПараметры.Свойство("ПутьКФайлу") Тогда ТекПутьКФайлу = ДополнительныеПараметры.ПутьКФайлу; #Если ВебКлиент Тогда ТекПутьКФайлу_НавигационнаяСсылка = ""; #Иначе ТекПутьКФайлу_НавигационнаяСсылка = "file:///" + ТекПутьКФайлу; #КонецЕсли Попытка ПоказатьОповещениеПользователя("Save", ТекПутьКФайлу_НавигационнаяСсылка, ТекПутьКФайлу, БиблиотекаКартинок.Информация32); Исключение ПоказатьОповещениеПользователя("Save", , ТекПутьКФайлу); КонецПопытки; КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти // }} Для теста &НаКлиенте Процедура ОбновитьТекстБраузераКлиент(ПутьКФайлу, АдресФайла = "") Если ЗначениеЗаполнено(АдресФайла) Тогда ОбновитьТекстБраузера(АдресФайла); Иначе Если ЗначениеЗаполнено(ПутьКФайлу) Тогда // {{ Для теста ФайлНаДиске = Новый Файл(ПутьКФайлу); ИмяФайлаPDF = ФайлНаДиске.Имя; ФайлНаДиске = Неопределено; // }} Для теста НачатьСозданиеДвоичныхДанныхИзФайла(Новый ОписаниеОповещения("СозданиеДвоичныхДанныхИзФайлаЗавершение", ЭтотОбъект, Параметры), ПутьКФайлу); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПомещениеФайловЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт ПутьКФайлуPDF = ВыбранноеИмяФайла; АдресФайлаPDF = Адрес; ОбновитьТекстБраузераКлиент(ПутьКФайлуPDF, АдресФайлаPDF); КонецПроцедуры &НаКлиенте Процедура ПутьКФайлуПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт Если Не ВыбранныеФайлы = Неопределено Тогда ПутьКФайлуPDF = ВыбранныеФайлы[0]; ОбновитьТекстБраузераКлиент(ПутьКФайлуPDF); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПутьКФайлуНачалоВыбораЗавершение(Результат) Экспорт АдресФайлаPDF = ""; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Заголовок = "Укажите имя файла"; ДиалогВыбораФайла.Фильтр = "Документ PDF (*.pdf)|*.pdf"; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлуPDF; #Если ВебКлиент Тогда Если ПодключитьРасширениеРаботыСФайлами() Тогда ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("ПутьКФайлуПослеВыбораФайла", ЭтотОбъект)); Иначе НачатьПомещениеФайла(Новый ОписаниеОповещения("ПомещениеФайловЗавершение", ЭтотОбъект), , ДиалогВыбораФайла, Истина, УникальныйИдентификатор); КонецЕсли; #Иначе ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("ПутьКФайлуПослеВыбораФайла", ЭтотОбъект)); #КонецЕсли КонецПроцедуры &НаКлиенте Процедура ПутьКФайлуНачалоВыбораЗавершениеВебКлиент(Подключено, ДополнительныеПараметры) Экспорт Если Не Подключено Тогда НачатьУстановкуРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПутьКФайлуНачалоВыбораЗавершение", ЭтотОбъект)); Иначе ПутьКФайлуНачалоВыбораЗавершение(Неопределено); КонецЕсли; КонецПроцедуры // Обработчики событий &НаКлиенте Процедура ПриОткрытии(Отказ) #Если ВебКлиент Тогда ЭтоВебКлиент = Истина; #Иначе ЭтоВебКлиент = Ложь; #КонецЕсли КонецПроцедуры &НаКлиенте Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) #Если ВебКлиент Тогда НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПутьКФайлуНачалоВыбораЗавершениеВебКлиент", ЭтотОбъект)); #Иначе ПутьКФайлуНачалоВыбораЗавершение(Неопределено); #КонецЕсли КонецПроцедуры // Обработчики команд &НаКлиенте Процедура КомандаОбновить(Команда) ОбновитьТекстБраузераКлиент(ПутьКФайлуPDF, АдресФайлаPDF); КонецПроцедуры
Просмотр файлов PDF
20.08.19
Разработка - Работа с интерфейсом
Еще один пример просмотра файлов PDF.
В обработке реализован пример просмотра локальных файлов PDF.
Дополнительно добавлен тестовый режим (один из вариантов для использования на сервере), в котором можно увидеть ограничение платформы 1С при попытке просмотра больших файлов PDF (~более 20Мб), при этом (не смотря на предупреждение об ошибке) будет сформирован валидный тестовый файл html, который можно будет протестировать в разных браузерах.
П.С. Тестировалось в тонком, толстом и web клиентах на 8.3.13.1690
Скачать файл
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Наименование | По подписке [?] | Купить один файл | |
---|---|---|---|
PDFViewer
.epf 8,97Kb
25
|