1С 8.3 Печать PDF Файла средствами 1С
Данные > Примеры кода 1С > 1С 8.3 Файлы, каталоги
Перейти в раздел примеры кода 1С 8.3:
Печать файла в формате PDF (Пример №1) из 1С 8.3:
Процедура Печать_PDF_Файлов_1С(PDF_File) Экспорт
// Простая печать средствами 1С, программно распечатать файл в формате PDF из 1С
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// Должен быть зарегистрирован предварительный просмотр в системе
AppShell = Новый COMОбъект("Shell.Application");
AppShell.ShellExecute(PDF_File, "", "", "print", 0);
КонецПроцедуры
// Простая печать средствами 1С, программно распечатать файл в формате PDF из 1С
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// Должен быть зарегистрирован предварительный просмотр в системе
AppShell = Новый COMОбъект("Shell.Application");
AppShell.ShellExecute(PDF_File, "", "", "print", 0);
КонецПроцедуры
Печать файла в формате PDF (Пример №2) из 1С 8.3:
Процедура Печать_PDF_Файла_Фоновая(МассивФайловPDF, ИмяУстройства = "") Экспорт
// Процедура печатает pdf-файлы (из списка) в фоновом режиме (без участия пользователя)
// Параметры процедуры:
// МассивФайловPDF - массив элементов типа "Файл" или массив структур с ключами "ПолноеИмя" и "Имя"
// ИмяУстройства - имя МФУ или принтера в системе
WScriptShell = Новый COMОбъект("WScript.Shell");
Путь_AdobeReader = WScriptShell .RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
Если Не ЗначениеЗаполнено(Путь_AdobeReader) Тогда
Сообщить("Печать pdf-файлов невозможна! Не найдена программа Adobe Reader!", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
WbemScripting = Новый COMОбъект("WbemScripting.SWbemLocator");
ConnectServer = WbemScripting.ConnectServer("", "", "", ""); //Задания от всех пользователей
ConnectServer.Security_.impersonationlevel = 3; // Получение нужных прав
ConnectServer.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");
Для Каждого ФайлPDF Из МассивФайловPDF Цикл
WScriptShell .Run(Путь_AdobeReader + " /N /T " + ФайлPDF.ПолноеИмя + ?(ЗначениеЗаполнено(ИмяУстройства), " " + ИмяУстройства, ""), 0);
ДобавленоЗадание = Ложь;
ТекущееВремя = ТекущаяДата();
// 40 секунд на добавление задания см.ОбработкаПрерыванияПользователя
Пока Не ДобавленоЗадание И ТекущаяДата() < ТекущееВремя + 40 Цикл
ОбработкаПрерыванияПользователя();
Для Каждого PrintJob Из ConnectServer.InstancesOf("Win32_PrintJob") Цикл
ОбработкаПрерыванияПользователя();
ДобавленоЗадание = PrintJob.Document = ФайлPDF.Имя;
КонецЦикла;
КонецЦикла;
Если Не ДобавленоЗадание Тогда
Сообщить("Не удалось распечатать файл '" + ФайлPDF.Имя + "'!", СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;
// Ожидание завершения печати
Пока ConnectServer.InstancesOf("Win32_PrintJob").Count > 0 Цикл
КонецЦикла;
// Получение имени процесса
НомерСимвола = Найти(Путь_AdobeReader, "\");
Пока НомерСимвола > 0 Цикл
Путь_AdobeReader = Сред(Путь_AdobeReader, НомерСимвола + 1);
НомерСимвола = Найти(Путь_AdobeReader, "\");
КонецЦикла;
// Удаление процесса
WScriptShell.Run("taskkill /f /im " + Путь_AdobeReader, 0);
КонецПроцедуры
// Процедура печатает pdf-файлы (из списка) в фоновом режиме (без участия пользователя)
// Параметры процедуры:
// МассивФайловPDF - массив элементов типа "Файл" или массив структур с ключами "ПолноеИмя" и "Имя"
// ИмяУстройства - имя МФУ или принтера в системе
WScriptShell = Новый COMОбъект("WScript.Shell");
Путь_AdobeReader = WScriptShell .RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
Если Не ЗначениеЗаполнено(Путь_AdobeReader) Тогда
Сообщить("Печать pdf-файлов невозможна! Не найдена программа Adobe Reader!", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
WbemScripting = Новый COMОбъект("WbemScripting.SWbemLocator");
ConnectServer = WbemScripting.ConnectServer("", "", "", ""); //Задания от всех пользователей
ConnectServer.Security_.impersonationlevel = 3; // Получение нужных прав
ConnectServer.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");
Для Каждого ФайлPDF Из МассивФайловPDF Цикл
WScriptShell .Run(Путь_AdobeReader + " /N /T " + ФайлPDF.ПолноеИмя + ?(ЗначениеЗаполнено(ИмяУстройства), " " + ИмяУстройства, ""), 0);
ДобавленоЗадание = Ложь;
ТекущееВремя = ТекущаяДата();
// 40 секунд на добавление задания см.ОбработкаПрерыванияПользователя
Пока Не ДобавленоЗадание И ТекущаяДата() < ТекущееВремя + 40 Цикл
ОбработкаПрерыванияПользователя();
Для Каждого PrintJob Из ConnectServer.InstancesOf("Win32_PrintJob") Цикл
ОбработкаПрерыванияПользователя();
ДобавленоЗадание = PrintJob.Document = ФайлPDF.Имя;
КонецЦикла;
КонецЦикла;
Если Не ДобавленоЗадание Тогда
Сообщить("Не удалось распечатать файл '" + ФайлPDF.Имя + "'!", СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;
// Ожидание завершения печати
Пока ConnectServer.InstancesOf("Win32_PrintJob").Count > 0 Цикл
КонецЦикла;
// Получение имени процесса
НомерСимвола = Найти(Путь_AdobeReader, "\");
Пока НомерСимвола > 0 Цикл
Путь_AdobeReader = Сред(Путь_AdobeReader, НомерСимвола + 1);
НомерСимвола = Найти(Путь_AdobeReader, "\");
КонецЦикла;
// Удаление процесса
WScriptShell.Run("taskkill /f /im " + Путь_AdobeReader, 0);
КонецПроцедуры
Печать файла в формате PDF (Пример №3) из 1С 8.3:
Процедура Печать_PDF_Файла_Acrobat(PDF_File, ИмяУстройства, ОтправитьСразуНаПринтер) Экспорт
//Параметры процедуры для программной распечатати файла в формате PDF из 1С 8.3 :
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// ИмяУстройства - имя МФУ или принтера в системе
// ОтправитьСразуНаПринтер - булево (истина-на принтер, ложь-открыть для просмотра)
AdobeAR = Новый Файл("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe");
Если AdobeAR.Существует() Тогда
Если ОтправитьСразуНаПринтер = Истина Тогда
// Параметры командной строки Acrobat Reader:
// /o - не открывать диалоговое окно приложения
// /h - открыть приложение и свернуть на панели задач
// /p - открыть файл в приложении и сразу перейти к диалоговому окну печати
// /t [ [ []]] - распечатать файл на указанном принтере
ЗапуститьПриложение("""" + AdobeAR.ПолноеИмя + """ /o /t """ + PDF_File + """ """ + ИмяУстройства + """");
// <директория приложения> /o /t <имя файла> <имя принтера>
Иначе
ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
КонецЕсли;
Иначе
Сообщить("Не установлен Acrobat Reader DC! Печать невозможна!");
ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
КонецЕсли;
КонецПроцедуры
//Параметры процедуры для программной распечатати файла в формате PDF из 1С 8.3 :
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// ИмяУстройства - имя МФУ или принтера в системе
// ОтправитьСразуНаПринтер - булево (истина-на принтер, ложь-открыть для просмотра)
AdobeAR = Новый Файл("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe");
Если AdobeAR.Существует() Тогда
Если ОтправитьСразуНаПринтер = Истина Тогда
// Параметры командной строки Acrobat Reader:
// /o - не открывать диалоговое окно приложения
// /h - открыть приложение и свернуть на панели задач
// /p - открыть файл в приложении и сразу перейти к диалоговому окну печати
// /t [ [ []]] - распечатать файл на указанном принтере
ЗапуститьПриложение("""" + AdobeAR.ПолноеИмя + """ /o /t """ + PDF_File + """ """ + ИмяУстройства + """");
// <директория приложения> /o /t <имя файла> <имя принтера>
Иначе
ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
КонецЕсли;
Иначе
Сообщить("Не установлен Acrobat Reader DC! Печать невозможна!");
ЗапуститьПриложение(PDF_File);//открываем на просмотр средствами ОС
КонецЕсли;
КонецПроцедуры
Печать файла в формате PDF (Пример №4) из 1С 8.3:
Процедура Печать_PDF_Файла_AcroPDF(PDF_File) Экспорт
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
AdobeAR = Новый COMОбъект("AcroPDF.PDF.1");
AdobeAR.Visible = false;
AdobeAR.LoadFile(PDF_File);
AdobeAR.printAll();
//или AdobeAR.printWithDialog();
AdobeAR.CloseAllDocs();
AdobeAR.Exit();
КонецПроцедуры
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
AdobeAR = Новый COMОбъект("AcroPDF.PDF.1");
AdobeAR.Visible = false;
AdobeAR.LoadFile(PDF_File);
AdobeAR.printAll();
//или AdobeAR.printWithDialog();
AdobeAR.CloseAllDocs();
AdobeAR.Exit();
КонецПроцедуры
Печать файла в формате PDF (Пример №5) из 1С 8.3:
Процедура Пакетная_печать_PDF_Файлов_из_папки(PDF_Folder) Экспорт
// PDF_Folder - путь к папке с файлами ПДФ (например: D:\Temp1C_PDF)
Shell = Новый COMОбъект("Shell.Application");
Folder = Shell.Namespace(PDF_Folder);
Folders = Folder.Items;
Для Каждого Folder0 Из Folders Цикл
Folder0.InvokeVerbEx("Print");
КонецЦикла;
КонецПроцедуры
// PDF_Folder - путь к папке с файлами ПДФ (например: D:\Temp1C_PDF)
Shell = Новый COMОбъект("Shell.Application");
Folder = Shell.Namespace(PDF_Folder);
Folders = Folder.Items;
Для Каждого Folder0 Из Folders Цикл
Folder0.InvokeVerbEx("Print");
КонецЦикла;
КонецПроцедуры
Печать файла в формате PDF (Пример №6) из 1С 8.3:
Процедура Печать_PDF_Файла_Bullzip(Табл, PDF_File)
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// Используется сторонняя программа:
// https://www.bullzip.com/products/pdf/info.php
ИмяУстройства = Новый ComObject("Bullzip.PDFPrinterSettings");
ИмяУстройства.SetValue("output", PDF_File);
ИмяУстройства.SetValue("ShowSaveAS", "never");
ИмяУстройства.SetValue("ShowProgress", "no");
ИмяУстройства.SetValue("ShowProgressFinished", "no");
ИмяУстройства.SetValue("ShowSettings", "never");
ИмяУстройства.SetValue("ShowPDF", "no");
ИмяУстройства.SetValue("ConfirmOverwrite","no");
ИмяУстройства.SetValue("OwnerPassword","Pass4PDF");
ИмяУстройства.SetValue("Permissions",61636);
ИмяУстройства.WriteSettings();
Табл.Автомасштаб=Истина;
Табл.Имяпринтера="Bullzip PDF Printer";
PDFФайл = Новый Файл(PDF_File);
Если НЕ PDFФайл.Существует() Тогда
Табл.Напечатать(Истина);
Пока НЕ PDFФайл.Существует() Цикл
ОбработкаПрерыванияПользователя();
//ТаймерЗадержки;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// PDF_File - полный путь к файлу ПДФ (например: D:\Temp1C_PDF\INPUT.pdf)
// Используется сторонняя программа:
// https://www.bullzip.com/products/pdf/info.php
ИмяУстройства = Новый ComObject("Bullzip.PDFPrinterSettings");
ИмяУстройства.SetValue("output", PDF_File);
ИмяУстройства.SetValue("ShowSaveAS", "never");
ИмяУстройства.SetValue("ShowProgress", "no");
ИмяУстройства.SetValue("ShowProgressFinished", "no");
ИмяУстройства.SetValue("ShowSettings", "never");
ИмяУстройства.SetValue("ShowPDF", "no");
ИмяУстройства.SetValue("ConfirmOverwrite","no");
ИмяУстройства.SetValue("OwnerPassword","Pass4PDF");
ИмяУстройства.SetValue("Permissions",61636);
ИмяУстройства.WriteSettings();
Табл.Автомасштаб=Истина;
Табл.Имяпринтера="Bullzip PDF Printer";
PDFФайл = Новый Файл(PDF_File);
Если НЕ PDFФайл.Существует() Тогда
Табл.Напечатать(Истина);
Пока НЕ PDFФайл.Существует() Цикл
ОбработкаПрерыванияПользователя();
//ТаймерЗадержки;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
📰 Актуальные новости с тегом #PDF:
- В версию 8.3.26 добавлена возможность получения размера страницы PDF
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник