Документы и Печать · 10 мин
Как сохранить документ Word как PDF в 1С
Как сохранить документ Word в PDF из 1С: через печатную форму, COM-объект Word.Application, виртуальный принтер и встроенные механизмы. Примеры кода и типичные ошибки.
Задача сохранить документ в формате PDF возникает в 1С постоянно: счета, акты, договоры и письма удобнее отправлять контрагентам именно в PDF — файл не «поплывёт» при открытии на другом компьютере и защищён от случайного редактирования. Если печатная форма построена на шаблоне Word, есть несколько рабочих способов получить PDF, и выбор зависит от того, где выполняется код — на клиенте или на сервере, установлен ли Microsoft Office, и нужна ли автоматизация без участия пользователя.
Простейший путь — вообще не использовать Word как конечный формат: сформировать табличный документ и сохранить его в PDF штатными средствами платформы. Но когда макет сделан именно в Word (сложная вёрстка, корпоративный шаблон от юристов), приходится конвертировать. Ниже разобраны четыре практических подхода: штатное сохранение табличного документа, экспорт через COM-объект Word, печать на виртуальный PDF-принтер и сторонние конвертеры, а также проверка результата и типичные ошибки.
Выбор способа: что учесть до написания кода
Первый вопрос — где исполняется код. На сервере 1С обычно нет установленного Microsoft Office, и устанавливать его туда не рекомендуется: COM-автоматизация Word не предназначена для многопоточной серверной работы, процессы winword.exe могут зависать и накапливаться. Поэтому серверная генерация PDF должна опираться на штатные механизмы платформы, а не на Word.
Второй вопрос — в каком виде хранится шаблон. Если печатная форма строится как табличный документ (макет типа «Табличный документ»), конвертация в PDF выполняется одной строкой кода без внешних программ. Если шаблон — файл .docx с закладками или макет ActiveDocument, вариантов два: либо перенести вёрстку в табличный макет, либо экспортировать в PDF средствами самого Word.
Третий фактор — интерактивность. В файловой базе на компьютере пользователя с установленным Word допустим COM-вызов. В клиент-серверном варианте с тонким или веб-клиентом COM-объекты недоступны, и единственный устойчивый путь — серверное формирование PDF из табличного документа.
Как выбрать действие
Способ 1. Сохранение табличного документа в PDF штатно
Это основной и рекомендуемый метод. У объекта ТабличныйДокумент есть метод Записать, который принимает имя файла и тип файла. Для PDF используется значение ТипФайлаТабличногоДокумента.PDF. Метод работает на сервере, на толстом и тонком клиенте, не требует установленного Office и даёт предсказуемый результат.
ТабДок = СформироватьПечатнуюФорму(ДокументСсылка);
ТабДок.Записать("C:\Temp\Счет.pdf", ТипФайлаТабличногоДокумента.PDF);
Перед записью проверьте настройки страницы табличного документа: ориентацию, поля, масштаб и параметры автоподбора ширины. PDF формируется по тем же правилам, что и печать, поэтому если на бумаге документ обрезался, в PDF он тоже будет обрезан. Полезно прогнать документ через предварительный просмотр и убедиться, что разбиение на страницы корректное.
Для отправки по почте файл не обязательно сохранять на диск пользователя: можно записать PDF во временный файл, поместить во временное хранилище и вложить в письмо через объект ИнтернетПочтовоеСообщение. После отправки временный файл удаляется.
Способ 2. Экспорт из Word через COM-объект
Когда шаблон принципиально хранится в Word, PDF создаётся средствами самого Word. Код открывает документ через COM-объект Word.Application, заполняет закладки или параметризованные области и вызывает метод ExportAsFixedFormat, который штатно сохраняет документ как PDF. Формат PDF задаётся константой wdExportFormatPDF (числовое значение 17).
Word = Новый COMОбъект("Word.Application");
Word.Visible = Ложь;
Документ = Word.Documents.Open("C:\Шаблоны\Договор.docx");
// заполнение закладок...
Документ.ExportAsFixedFormat("C:\Temp\Договор.pdf", 17);
Документ.Close(Ложь);
Word.Quit();
Обязательно освобождайте COM-объекты в обратном порядке: сначала закрыть документ без сохранения изменений в шаблон, затем завершить приложение Word. Если код прерывается ошибкой до вызова Quit, в системе остаётся зависший невидимый процесс winword.exe, который блокирует файлы и занимает память. Оборачивайте работу с COM в попытку-исключение и завершайте Word в блоке Исключение тоже.
Учтите ограничение: этот способ требует установленного Microsoft Word на машине, где исполняется код, и работает только в толстом клиенте Windows. На сервере 1С и в веб-клиенте он неприменим.
Способ 3. Печать на виртуальный PDF-принтер
Если дорабатывать конфигурацию нельзя, PDF получают вручную через виртуальный принтер. В Windows встроен принтер «Microsoft Print to PDF»: достаточно открыть печатную форму в 1С или документ в Word, вызвать печать, выбрать этот принтер и указать имя файла. Способ подходит для разовых задач и не требует прав на изменение конфигурации.
Для пакетной обработки этот путь неудобен: каждый файл требует диалога выбора имени. Существуют виртуальные принтеры с автосохранением в заданную папку, но их установка и настройка — зона ответственности системного администратора, и в терминальной среде поведение таких принтеров нужно проверять отдельно.
Сравнение вариантов
Универсально, работает на сервере и в веб-клиенте, без Office. Ограничение: шаблон должен быть табличным макетом
Сохраняет вёрстку Word один в один. Ограничение: только клиент Windows с установленным Word, не для сервера
Без доработок конфигурации. Ограничение: ручная операция, не подходит для автоматической рассылки
Проверка результата и контроль качества PDF
После формирования PDF убедитесь, что файл действительно создан и открывается. Программно проверяют существование файла и его размер: нулевой размер означает сбой записи. При COM-экспорте полезно проверять код возврата и отсутствие исключений, а также то, что процесс Word завершился.
Визуальная проверка тоже важна, особенно после смены шаблона: откройте несколько сформированных файлов и сравните с эталоном. Типичные дефекты — обрезанные колонтитулы, съехавшие таблицы, заменённые шрифты. Если в PDF подставился другой шрифт, значит, исходный шрифт не установлен на машине, где выполнялась конвертация: на сервере набор шрифтов часто минимальный.
Как проверить результат
Файл существует, размер больше нуля, открывается в просмотрщике PDF
Файл отсутствует или имеет нулевой размер — сбой записи или прав доступа
Таблицы и колонтитулы на месте, разбиение страниц как в предпросмотре
Обрезанные строки, пустые страницы — проверить поля и масштаб макета
Текст отображается тем же шрифтом, что в шаблоне
Шрифт заменён системным — шрифт не установлен на машине конвертации
В диспетчере задач нет лишних winword.exe
Накапливаются зависшие процессы Word — код не вызывает Quit
Типичные ошибки и ограничения
Самая частая ошибка — попытка использовать COM-объект Word на сервере или в тонком клиенте. Код падает с ошибкой создания COM-объекта либо, что хуже, зависает. Второе место занимает запись PDF в папку, куда у учётной записи сервера 1С нет прав: используйте каталоги временных файлов (ПолучитьИмяВременногоФайла) или явно выделенные сетевые папки с проверенными правами.
Ещё одна группа проблем — кодировки и пути с русскими буквами при передаче файлов между клиентом и сервером. Передавайте данные через временное хранилище, а не через прямые пути клиентской машины: сервер не видит диск C: пользователя. Наконец, не сохраняйте изменения в сам шаблон Word при экспорте — закрывайте документ с параметром «не сохранять», иначе шаблон постепенно «засоряется» данными прошлых документов.
Часто задаваемые вопросы
Можно ли сохранить в PDF без установленного Word?
Да, если печатная форма строится как табличный документ: метод Записать с типом ТипФайлаТабличногоДокумента.PDF не требует никаких внешних программ. Если же исходник — файл Word, без Word (или стороннего конвертера) корректно преобразовать его в PDF не получится.
Почему код с COM-объектом работает у бухгалтера, но не работает на сервере?
На компьютере бухгалтера установлен Microsoft Word, а на сервере 1С — нет, либо учётная запись службы сервера не имеет права запускать COM-приложения. Для серверной генерации перенесите печатную форму в табличный макет.
Как отправить PDF по электронной почте сразу после формирования?
Запишите табличный документ во временный PDF-файл, добавьте его как вложение в объект ИнтернетПочтовоеСообщение и отправьте через ИнтернетПочта. После отправки удалите временный файл. Сохранять файл в документы пользователя для этого не нужно.
Почему в PDF заменился шрифт или «поехала» вёрстка?
При конвертации используются шрифты, установленные на машине, где выполняется код. Если шрифт шаблона отсутствует на сервере, он подменяется системным, и ширина строк меняется. Установите нужные шрифты на сервер или используйте стандартные шрифты в макете.
Можно ли формировать PDF в фоне регламентным заданием?
Да, но только штатным способом — из табличного документа. Фоновое задание на сервере формирует табличный документ и записывает его в PDF, например для ночной рассылки счетов. COM-автоматизацию Word в фоновых заданиях использовать нельзя.
Чем отличается ExportAsFixedFormat от «Сохранить как PDF» в Word?
Это программный вызов того же механизма экспорта, что и команда «Сохранить как → PDF» в интерфейсе Word. Результат идентичен, но вызов из кода позволяет автоматизировать процесс без открытия окон и диалогов.
Что важно запомнить
Основной способ сохранить документ 1С в PDF — записать табличный документ с типом ТипФайлаТабличногоДокумента.PDF: это работает на клиенте и сервере без Office. Word-шаблоны конвертируйте через ExportAsFixedFormat только на клиенте с установленным Word и всегда завершайте COM-объект. Для разовых задач без доработок подойдёт виртуальный принтер Microsoft Print to PDF.