Конвертация файлов .docx в формат pdf средствами COM-объекта MS Word

24.12.20

Разработка - Универсальные функции

Частное решение задачи конвертации docx в pdf средствами COM-объекта MS Word.

PDF/A — это подмножество формата PDF, содержащее ограниченный набор возможностей представления данных. Данный формат является стандартом ISO и предназначен для долгосрочного хранения электронных документов. 

В промышленной разработке все чаще возникает необходимость экспорта файлов различных форматов в PDF/A. И если экспорт табличных документов 1С в этот формат решен вендором (в т.ч. начиная с версии платформы 8.3.16 даже реализована возможность сохранения табличного документа в форматы PDF/A-2 и PDF/A-3   для системного перечисления ТипФайлаТабличногоДокумента реализованы значения PDF_A_2 и PDF_A_3),  то с конвертацией файлов других форматов, в частности .docx, есть вопросы.

В статье описан частный способ решения этой задачи для Windows окружения, требующий наличия Microsoft Word на сервере 1С.

Способ основан на методе ExportAsFixedFormat API Microsoft.Office.Tools.Word

 

   //в переменной ИмяВременногоФайлаDocx на входе файл .docx 

   ИмяВременногоФайлаPDF_A = ПолучитьИмяВременногоФайла(".pdf"); //выходной файл формата pdf/a

   WordApp = Новый COMОбъект("Word.Application");
   DocApp = WordApp.Documents.Add(ИмяВременногоФайлаDocx);
          
   UseISO19005_1 = True; //признак экспорта в формат pdf/a
        
   DocApp.ExportAsFixedFormat(ИмяВременногоФайлаPDF_A, 
                                    17, //wdExportFormatPDF    17
                                    0,     //OpenAfterExport                            
                                    0,     //OptimizeFor1
                                    0,  //Range
                                    0,  //From
                                    0,  //To
                                    0,  //Item
                                    1,  //IncludeDocProps
                                    0,  //KeepIRM
                                    0,  //CreateBookmarks
                                    1,  //DocStructureTags
                                    0,  //BitmapMissingFonts
                                    UseISO19005_1);
        
   WordApp.Application.Quit(); 
   WordApp = Неопределено;
        
        
   УдалитьФайлы(ИмяВременногоФайлаDocx);        
   УдалитьФайлы(ИмяВременногоФайлаPDF_A);      

 

Вступайте в нашу телеграмм-группу Инфостарт

Word.Application pdf/a

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3840    Abysswalker    9    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    7216    DeerCven    15    

60

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    51283    dimanich70    83    

172

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7525    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    64992    atdonya    31    

70

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9409    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. it_box 24 28.10.21 12:40 Сейчас в теме
Если использовать метод для сохранения "SaveAs2", то сэкономите время. он работает быстрее в 5 а иногда и в 10 раз.

DocApp.SaveAs2(ИмяВременногоФайлаPDF_A,17); //17 этоwdExportFormatPDF
user1069316; Glebis; moff; +3 Ответить
2. mariya.mary.00 26.01.22 11:50 Сейчас в теме
Добрый день!
Подскажите, пожалуйста, сделала как в вашем примере, такая вот ошибка:
Ошибка при вызове конструктора (COMОбъект)
WordApp = Новый COMОбъект("Word.Application");
по причине:
-2147467262(0x80004002): Интерфейс не поддерживается

Word установлен на сервере.
3. moff 17 26.01.22 15:20 Сейчас в теме
(2) проверьте что у серверного пользователя 1С
(под которым агент сервера запускается) есть права на создание com-объектов.

Пуск - Выполнить - dcomcnfg
Для отправки сообщения требуется регистрация/авторизация