Содержание:
1. Описание возможностей конфигурации платформы 1С для работы с PDF-документами
2. Пример работы с PDF-документами в системе конфигурации 1С
1. Описание возможностей конфигурации платформы 1С для работы с PDF-документами
В версии 8.3.21 платформы 1С появились инструменты для работы с PDF-документами.
Ранее для работы с PDF в 1С разработчики использовали дополнительное программное обеспечение, например Ghostscript. Пока возможности конфигурации платформы 1С позволяют решить только ряд наиболее востребованных задач с PDF-документами. Но будем надеяться, что в ближайшее время функциональность в этом направлении расширится.
// Пример печати массива файлов внешним приложением Ghostscript
&НаКлиенте
Процедура НапечататьИзПриложенияПоИменамФайловGhostscript(МассивИменФайловДляПечати)
Shell = Новый COMОбъект("WScript.Shell");
ИменаФайловСтрокой = СтрСоединить(МассивИменФайловДляПечати, " ");
ПутьИмениПринтераПоУмолчанию ="HKCU\Software\Microsoft\WindowsNT\"
+ "CurrentVersion\Windows\Device";
ПараметрыПринтераПоУмолчанию = Shell.RegRead(ПутьИмениПринтераПоУмолчанию);
МассивПараметровПринтера = СтрРазделить(ПараметрыПринтераПоУмолчанию, ",");
Если МассивПараметровПринтера.Количество() > 0 Тогда
ИмяПринтера = МассивПараметровПринтера.Получить(0);
ШаблонСтрокиПечатиGhostscript = "gswin64c -dBATCH -dNOPAUSE "
+ "-sDEVICE=mswinpr2 -sOutputFile=""%printer%%1"" "
+ "-dFIXEDMEDIA -dFitPage -sPAPERSIZE=%2 "
+ "-c ""<< /NumCopies %3>> setpagedevice"" -f %4";
СтрокаПечати = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСтрокиПечатиGhostscript,
ИмяПринтера,
НРег(РазмерСтраницы), // Например РазмерСтраницы = "a3" раскладка
КоличествоКопий, // английская, регистр нижний
ИменаФайловСтрокой);
Shell.Run(СтрокаПечати, 0);
КонецЕсли;
КонецПроцедуры
1) Реализован объект ДокументPDF, который позволяет работать с 1С документами PDF синхронно и асинхронно.
Для того, чтобы прочитать PDF- документ, необходимо использовать метод ДокументPDF.Прочитать(). Читать файл можно не только с диска, но и из потока.
2) С помощью свойства ДокументPDF.ТипФайла можно определить, в каком формате записан открытый документ (в обычном или в формате долгосрочного хранения PDF/A).
3) В 1С документы PDF можно защитить паролем. Пароль можно передать во втором параметре метода Прочитать().
4) Для проверки наличия пароля у 1C документа PDF, предназначен метод глобального контекста ДокументЗащищенПаролем(). Проверить наличие пароля можно для файла на диске и для документа, размещенного в потоке.
5) Документ PDF можно записать в файл на диске или поток с помощью метода Записать(). При записи можно установить пароль.
6) Для просмотра 1С документа PDF предназначен метод ДокументPDF.Показать(). Данный метод открывает форму просмотра документа PDF и позволяет сохранить измененный PDF- документ в указанный файл.
7) Реализована возможность печати документов PDF средствами конфигурации программы 1С. Для печати документа предназначен метод ДокументPDF .Напечатать().
Перед печатью предоставляется возможность открыть диалог параметров формы печати документа 1С.
8) Реализована возможность просмотра и проверки подлинности 1С электронных подписей документа. Поддерживается работа с зашифрованными документами.
Используя объект ДокументPDF все операции с подписями можно проделать через сам документ PDF, не открывая его отдельно на чтение и отдельно на запись.
Для добавления электронной подписи задействуются два механизма платформы: механизм работы с документом PDF и механизм криптографии. Для этого используется объект типа ОписаниеПодписиPDF, описывающий цифровую подпись.
Кроме цифровой подписи документа PDF, средствами платформы можно добавить в документ представление подписи (Картинка или ТабличныйДокумент). Для этого используется объект типа ОписаниеОтображаемогоОбъектаPDF.
9) Для отображения документа в форме PDF реализованы: реквизит формы типа ДокументPDF и поле формы вида ПолеPDFдокумента.
У поля формы, имеется обработчик события НажатиеНаНавигационнойСсылке. Он будет вызван, если пользователь нажимает какую-либо гиперссылку отображаемого PDF -документа.
Для отображения дополнительной информации PDF -документа (например, состояния подписей) служит дополнение СостояниеПросмотра поля формы ПолеPDFДокумента.
10) Объекты ЗаписьPDF и ЧтениеPDF позволяют изменять и читать вложения 1С документа PDF.
Объект КоллекцияВложенийPDF предназначен для формирования коллекции вложений. Для работы с вложениями обьекта ДокументPDF используется свойство Вложения (тип КоллекцияВложенийPDF).
2. Пример работы с PDF- документами в системе конфигурации 1С
Для сокращения размера примеров приведем только функционально-значимые моменты реализации и рассмотрим только синхронные методы работы.
1) Имеется заранее сформированный список 1С документов PDF.
Просмотр, печать, изображения, вложения документов PDF
2) Для PDF просмотра документа используем метод ДокументPDF.Показать (), предварительно прочитав данные документа.
Метод ДокументPDF.Прочитать() позволяет считывать файл PDF как с диска, так и из потока:
· Для создания файла на диске, можно использовать метод Записать() для объекта типа ДвоичныеДанные.
· Для стандартизированной работы с файлами на диске, можно использовать функционал БСП (подсистема Работа с файлами).
· Для считывания файла из потока необходимо предварительно открыть поток данных в файле. Например использовать метод ОткрытьПотокДляЧтения() для объекта типа ДвоичныеДанные.
// Открывает окно для показа и редактирования PDF-документа
// Параметры:
// ДанныеФайлаPDF - Строка, Поток - путь к файлу на диске или поток данных файла
&НаКлиенте
Процедура ПоказатьДокументPDF(ДанныеФайлаPDF)
пДокументPDF = Новый ДокументPDF();
пДокументPDF.Прочитать(ДанныеФайлаPDF);
пДокументPDF.Показать("Заголовок документа PDF");
КонецПроцедуры
Откроется форма просмотра 1С документа PDF.
Заголовок документа PDF
3) Для печати PDF- документа используем метод ДокументPDF.Напечатать(), предварительно прочитав данные документа методом ДокументPDF.Прочитать().
// Выводит PDF документ на печать
// Параметры:
// ДанныеФайлаPDF - Строка, Поток - путь к файлу на диске или поток данных файла
&НаКлиенте
Процедура НапечататьДокументPDF(ДанныеФайлаPDF)
пДокументPDF = Новый ДокументPDF();
пДокументPDF.Прочитать(ДанныеФайлаPDF);
пДокументPDF.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецПроцедуры
Откроется диалог параметров страницы печати документа PDF.
Диалог параметров страницы
4) Добавим графический объект в PDF- документ, используя метод ЗаписьPDF.ЗаписатьОтображаемыйОбъект(Описание). Для этого предварительно сформируем описание графического объекта (картинки или табличного документа).
// Добавляет графический объект в PDF документ
// (картинку или табличный документ)
// Параметры:
// ПутьФайлаPDF - Строка - путь к файлу на диске
&НаКлиенте
Процедура ДобавитьИзображениеPDF(ПутьФайлаPDF)
Описание = Новый ОписаниеОтображаемогоОбъектаPDF;
Описание.Имя = "Картинка";
Описание.Ширина = 100;
Описание.Высота = 100;
Описание.Лево = 100;
Описание.Верх = 5;
Описание.НомерСтраницы = 1;
Описание.Объект = БиблиотекаКартинок.ДлительнаяОперация48;
ЗаписьPDF = Новый ЗаписьPDF(ПутьФайлаPDF);
ЗаписьPDF.ЗаписатьОтображаемыйОбъект(Описание);
КонецПроцедуры
В PDF -документе появится описанное изображение. Данный механизм можно использовать для добавления представления цифровой подписи 1С.
Заголовок документа PDF
5) Для примера работы с коллекцией КоллекцияВложенийPDF, добавим файл в PDF- документ, используя метод ДокументPDF.Вложения.Добавить().
// Добавляет вложение в PDF документ
// Параметры:
// ПутьФайлаPDF - Строка - путь к файлу на диске
// ПутьФайлаВложенияКартинка - Строка - путь к файлу вложению на диске
&НаКлиенте
Процедура ДобавитьВложениеPDF(ПутьФайлаPDF, ПутьФайлаВложенияКартинка)
// Сформируем двоичные данные файлов
ФайлPDF = Новый ДвоичныеДанные(ПутьФайлаPDF);
ФайлВложениеКартинка = Новый ДвоичныеДанные(ПутьФайлаВложенияКартинка);
ПотокФайлPDF = ФайлPDF.ОткрытьПотокДляЧтения();
пДокументPDF = Новый ДокументPDF();
// Прочитаем файл из потока во избежание
// ошибки совместного доступа к файлу при записи
пДокументPDF.Прочитать(ПотокФайлPDF);
пДокументPDF.Вложения.Добавить("ФайлВложение", ФайлВложениеКартинка);
пДокументPDF.Записать(ПутьФайлаPDF);
КонецПроцедуры
Во вложениях PDF-документа появится добавленный объект.
Добавленный объект во вложениях PDF-документа
Специалист компании "Кодерлайн"
Роман Мавлютов