Как сохранить документ Word или табличный документ 1С 7.7 в формат PDF?

Программист 1С v7.7
← На главную

При работе с системой 1С 7.7 часто возникает необходимость сохранения документов в формате PDF. Штатными средствами 1С 7.7 напрямую сохранить документ в PDF невозможно, так как она поддерживает лишь несколько форматов: .mxl (собственный формат 1С), .xls (Excel), .htm/.html и .txt. Однако, существует несколько эффективных подходов для решения этой задачи, которые мы подробно рассмотрим. Авторы темы столкнулись с проблемой при попытке сохранения документа Word в PDF через виртуальный принтер Bullzip, и мы разберем различные варианты, которые помогут не только решить эту конкретную проблему, но и дадут более широкое понимание процесса.

Использование виртуальных PDF-принтеров

Один из самых распространенных и универсальных способов сохранения документов в PDF из 1С 7.7 — это использование виртуальных PDF-принтеров. Эти программы имитируют обычный принтер, но вместо печати на бумаге они создают файл PDF. Мы рассмотрим подробнее, как это работает и какие виртуальные принтеры можно использовать.

Принцип работы и настройка

Виртуальный PDF-принтер устанавливается в операционную систему как обычный принтер. При отправке документа на печать, вместо выбора физического принтера, вы выбираете виртуальный PDF-принтер. После этого принтер обрабатывает печатную форму и сохраняет ее в указанном вами месте в формате PDF.

Для автоматизации этого процесса, особенно при программной печати из 1С 7.7, необходимо настроить виртуальный принтер таким образом, чтобы он не запрашивал подтверждение имени файла и пути сохранения каждый раз. Многие виртуальные принтеры, такие как Bullzip PDF Printer или PDFCreator, предоставляют такие настройки, позволяя программно задавать имя и путь для файла PDF.

Если вы столкнулись с проблемой, когда Bullzip не сохраняет файл, как в исходном сообщении, это может быть связано с несколькими причинами. Мы проанализируем возможные решения:

  1. Настройка Active Printer: Прежде чем отправить документ на печать, необходимо явно указать активный принтер, на который будет направлена печать. Вы можете использовать метод Application.ActivePrinter для объекта Word.
  2. Посмотрим на пример кода, который может помочь: перед вызовом метода PrintOut для документа Word, вставьте строку для установки активного принтера.

    
    ActDoc.Application.ActivePrinter = "ИмяВиртуальногоПринтера"; // Например, "Bullzip PDF Printer"
    // Затем вызываем метод печати
    ActDoc.PrintOut();
    

    Здесь ActDoc — это COM-объект, представляющий ваш документ Word, а "ИмяВиртуальногоПринтера" должно соответствовать точному имени вашего установленного PDF-принтера, как оно отображается в системе.

  3. Проблемы с длинными именами файлов и путей: В 1С 7.7 были известные проблемы с обработкой длинных имен файлов и путей (более 8 символов для имени файла и/или длинный путь к директории). Это могло приводить к ошибкам при сохранении файлов.
  4. Для устранения этой проблемы попробуйте использовать короткие имена директорий и файлов. Например, сохраняйте файл в директорию типа D:\1\ с именем файла 1.pdf вместо D:\МоиДокументы\ОтчетыПоПродажам\Отчет_за_месяц.pdf.

  5. Автоматизация сохранения: Убедитесь, что ваш виртуальный принтер настроен на автоматическое сохранение без вывода диалоговых окон. Например, в настройках Bullzip PDF Printer можно указать папку для сохранения и шаблон имени файла, а также отключить запросы подтверждения. Для его работы также часто требуется установленный GPL Ghostscript.

Альтернативные виртуальные принтеры

Помимо Bullzip, существует множество других виртуальных PDF-принтеров, которые могут быть полезны:

Особенности и возможные проблемы при использовании виртуальных принтеров

Сохранение через COM-объект Microsoft Word

Если исходный документ, который вы хотите сохранить в PDF, уже является документом Word, открытым через COM-объект из 1С 7.7, вы можете использовать встроенные возможности Word для сохранения в PDF. Этот метод является одним из наиболее прямых и эффективных для документов Word.

Принцип работы

Мы используем COM-объект Microsoft Word, чтобы открыть или создать документ, внести в него необходимые изменения, а затем вызвать метод сохранения, который поддерживает формат PDF. Для этого нам потребуется установленный Microsoft Office на компьютере, где выполняется код 1С 7.7.

Пример кода

Для сохранения активного документа Word в формате PDF, используем метод SaveAs объекта ActiveDocument с соответствующим параметром формата.

Разберем пример:


Перем _Word;
Перем _ДокументWord;

Попытка
    _Word = СоздатьОбъект("Word.Application");
    _Word.Visible = Ложь; // Можем скрыть Word, если не хотим показывать его пользователю

    // Открываем существующий документ Word или создаем новый
    // Пример открытия существующего:
    // _ДокументWord = _Word.Documents.Open("C:\Путь\К\Вашему\Документу.doc");
    // Или, если вы уже получили документ ранее, например, из табличного документа 1С
    // ActDoc = ... (полученный COM-объект документа Word)

    // Предполагаем, что у нас уже есть активный документ ActDoc, как в исходном вопросе
    // Или используем _Word.ActiveDocument, если Word уже открыт и документ активен
    
    // Определяем полный путь для сохранения PDF
    ПолныйПутьPDF = "D:\Путь\К\Файлу\МойДокумент.pdf";
    
    // Сохраняем документ Word в формат PDF
    // Параметр 17 соответствует формату wdExportFormatPDF
    _Word.ActiveDocument.SaveAs(ПолныйПутьPDF, 17); 
    
    // Закрываем документ Word без сохранения изменений, если он был создан/открыт для временных целей
    // _Word.ActiveDocument.Close(0); // 0 - wdDoNotSaveChanges
    
    // Закрываем приложение Word
    _Word.Quit();

Исключение
    Сообщить("Ошибка при сохранении документа Word в PDF: " + ОписаниеОшибки());
    Если _Word <> Неопределено Тогда
        _Word.Quit();
    КонецЕсли;
КонецПопытки;

В этом коде _Word.ActiveDocument.SaveAs(ПолныйПутьPDF, 17); является ключевой строкой. Параметр 17 указывает на формат PDF (константа wdFormatPDF в библиотеке объектов Word). Если требуется сохранить в формате PDF/A (для долгосрочного хранения), можно использовать метод ExportAsFixedFormat с соответствующими параметрами, но SaveAs с параметром 17 является более простым и распространенным решением.

Особенности и ограничения

Использование внешней компоненты Йоксель (Yoksel)

Для сохранения табличных документов 1С 7.7 в PDF существует специализированная внешняя компонента под названием Йоксель (Yoksel). Она значительно расширяет возможности работы с табличными документами, включая их экспорт в различные форматы, в том числе PDF.

Принцип работы

Йоксель предоставляет дополнительные методы для объекта "ТабличныйДокумент" 1С 7.7, позволяя более гибко управлять его выводом и сохранением. Вместо того чтобы имитировать печать, Йоксель напрямую конвертирует содержимое табличного документа в PDF.

Особенности и возможные проблемы

При использовании Йокселя могут возникать определенные нюансы, особенно в отношении разбивки на страницы:

Как решить проблему с разбивкой на страницы при использовании Йоксель

Для достижения адекватного сохранения в Йоксель, чтобы результат был максимально приближен к штатной печати, необходимо предпринимать определенные ухищрения. Мы выясним, как это сделать:

  1. Предварительный расчет размеров: Перед сохранением в PDF через Йоксель, необходимо предварительно рассчитать общую высоту и ширину печатной формы в 1С. Это можно сделать, перебирая строки и колонки табличного документа и суммируя их размеры.
  2. Установка пропорционального размера страницы PDF: После расчета общей высоты и ширины, эти значения можно использовать для установки пропорционального размера страницы PDF в Йоксель, выраженного в твипах (единица измерения в Windows). Это позволит Йокселю формировать документ так, чтобы он помещался на нужное количество страниц и сохранял правильное форматирование.
  3. Использование Йоксель.ГрафическийКонвертер.PDF: Эта часть компоненты Йоксель предоставляет функционал для конвертации. Убедитесь, что вы используете правильные методы и параметры для управления выводом.

Например, после формирования табличного документа, вы можете обратиться к методам Йокселя для экспорта:


ТабДок = СоздатьОбъект("ТабличныйДокумент");
// ... Здесь формируем ТабДок ...

// Загружаем внешнюю компоненту Йоксель
Если ЗагрузитьВнешнююКомпоненту("Йоксель") = 0 Тогда
    Сообщить("Не удалось загрузить компоненту Йоксель!");
    Возврат;
КонецЕсли;

Йоксель = СоздатьОбъект("AddIn.Йоксель");

// Параметры для сохранения в PDF через Йоксель
ПутьКPDF = "D:\Путь\К\Файлу\МойОтчетЙоксель.pdf";

// Устанавливаем настройки страницы, если это необходимо
// Например, ориентацию, поля, масштабирование, исходя из расчетов ТабДок
// Йоксель.УстановитьПараметрыСтраницы(...);

// Сохраняем табличный документ в PDF
Йоксель.ТабличныйДокумент.СохранитьВPDF(ТабДок, ПутьКPDF);

Сообщить("Документ успешно сохранен в PDF через Йоксель.");

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

Прочие подходы и особенности

Рассмотрим дополнительные варианты и важные моменты, которые могут быть полезны при работе с 1С 7.7 и PDF.

Сохранение через Excel

Если вам не подходят предыдущие варианты, мы можем использовать обходной путь через Microsoft Excel. Этап состоит из двух шагов:

  1. Сохранить как *.xls: В 1С 7.7 вы можете сохранить табличный документ в формате Excel.
  2. 
    ТабДок = СоздатьОбъект("ТабличныйДокумент");
    // ... Заполнение ТабДок ...
    ТабДок.Записать("D:\Путь\К\Файлу\МойДокумент.xls");
    
  3. Открыть в Excel и сохранить в PDF: Затем программно или вручную откройте этот файл .xls в Microsoft Excel. В Excel есть встроенная функция "Сохранить как PDF" или "Экспорт в PDF".
  4. Мы проанализируем пример кода с использованием COM-объекта Excel:

    
    Перем Excel;
    Перем Книга;
    Перем Лист;
    
    Попытка
        Excel = СоздатьОбъект("Excel.Application");
        Excel.Visible = Ложь; // Скрываем Excel
            
        ПолныйПутьXLS = "D:\Путь\К\Файлу\МойДокумент.xls";
        ПолныйПутьPDF = "D:\Путь\К\Файлу\МойДокументИзExcel.pdf";
    
        Книга = Excel.Workbooks.Open(ПолныйПутьXLS);
        Лист = Книга.Worksheets(1); // Берем первый лист
    
        // Сохраняем лист в PDF
        Лист.ExportAsFixedFormat(0, ПолныйПутьPDF, 0, 1, 0, 0, 0, Ложь, Ложь, Ложь);
        // Параметры:
        // 0 (xlTypePDF) - тип файла PDF
        // ПолныйПутьPDF - путь к файлу
        // 0 (xlQualityStandard) - качество
        // 1 (True) - включить/выключить стандартные свойства (пропуск)
        // 0 (False) - включить/выключить игнорирование областей печати
        // 0 - начало страницы
        // 0 - конец страницы
        // Ложь - включить/выключить открывание файла после публикации
        // Ложь - включить/выключить игнорирование областей печати
        // Ложь - включить/выключить сохранение изменений
    
        Книга.Close(0); // Закрываем книгу без сохранения изменений
        Excel.Quit(); // Закрываем Excel
    Исключение
        Сообщить("Ошибка при сохранении XLS в PDF через Excel: " + ОписаниеОшибки());
        Если Excel <> Неопределено Тогда
            Excel.Quit();
        КонецЕсли;
    КонецПопытки;
    

    Этот подход также требует наличия установленного Microsoft Excel.

Конвертация через 1С 8.х

Для клиентов, у которых есть доступ к 1С 8.х, существует интересный обходной путь: сохранить табличный документ 1С 7.7 сначала в формат .mxl (родной формат 1С), а затем использовать 1С 8.х, запущенную через командную строку, для конвертации .mxl в PDF. Этот метод может быть полезен в смешанных средах, где одновременно используются обе платформы.

Внешние печатные формы и обработки

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

Заключение

Мы рассмотрели несколько действенных способов сохранения документов в PDF из 1С 7.7. Выбор конкретного метода зависит от типа документа (Word или табличный документ 1С), наличия установленного Microsoft Office, требований к автоматизации и особенностей рабочей среды (например, терминальный режим).

Выбрав подходящий способ и тщательно следуя рекомендациям по настройке и использованию кода, вы сможете успешно реализовать функционал сохранения документов в PDF из 1С 7.7.

← На главную