При работе с архивными документами и государственными информационными системами часто возникает требование предоставлять файлы в формате PDF/A. Этот стандарт (ISO 19005) предназначен для долгосрочного хранения и гарантирует, что документ будет выглядеть одинаково через много лет. Однако платформа 1С:Предприятие 7.7, созданная задолго до появления этих стандартов, не имеет встроенных средств для такой конвертации. В этой статье мы разберем, как реализовать сохранение в PDF/A-1 и PDF/A-2, используя различные подходы: от виртуальных принтеров до прямого управления движком Ghostscript.
Прежде чем переходить к реализации, проанализируем, чем PDF/A отличается от обычного PDF и почему стандартные методы печати часто «проваливают» проверку (валидацию). Основные требования PDF/A включают:
Это классический метод, который позволяет программно управлять процессом печати. Рассмотрим настройку для старых систем (например, Windows Server 2003), где часто работает 1С 7.7. Для таких систем рекомендуется использовать версию PDFCreator 1.7.3, так как она обладает стабильным COM-интерфейсом.
Разберем пример кода для инициализации и настройки принтера:
// Создаем объект принтера
Попытка
PDFCreator = СоздатьОбъект("PDFCreator.clsPDFCreator");
Исключение
Сообщить("PDFCreator не установлен!");
Возврат;
КонецПопытки;
// Настройка параметров
PDFCreator.cStart("/NoProcessingAtStartup");
PDFCreator.cOption("UseAutosave") = 1;
PDFCreator.cOption("AutosaveDirectory") = "C:\PDF_Out\";
PDFCreator.cOption("AutosaveFilename") = "MyDocument";
PDFCreator.cOption("AutosaveFormat") = 0; // 0 = PDF
// Установка режима PDF/A-1b
// В старых версиях это делается через профили или специфические ключи
PDFCreator.cOption("PDF-AMode") = 1;
PDFCreator.cSaveOptions();
PDFCreator.cClearCache();
Важно помнить, что перед печатью необходимо программно установить принтер PDFCreator принтером по умолчанию в системе или использовать специализированные ВК для выбора принтера внутри 1С.
Проект Йоксель (Yoxel) и его расширения, такие как v7Moxel, позволяют работать с табличными документами 1С 7.7 более гибко. Рассмотрим сценарий, при котором мы сначала сохраняем таблицу в промежуточный формат, а затем конвертируем ее.
Выясним причину, почему прямой экспорт из Йокселя может не пройти валидацию PDF/A. Обычно это связано с отсутствием необходимых метаданных XMP. Для решения этой задачи мы можем использовать v7Moxel, который умеет более корректно обрабатывать шрифты при экспорте. Посмотрим на пример вызова:
// Пример использования v7Moxel для экспорта
Таб = СоздатьОбъект("Таблица");
// ... Заполнение таблицы ...
Конвертер = СоздатьОбъект("V7Moxel.ТабличныйДокумент");
Конвертер.Загрузить(Таб);
Конвертер.Записать("C:\temp\doc.pdf", "pdf");
Если полученный файл не соответствует PDF/A, потребуется дополнительный шаг постобработки, который мы разберем далее.
Если виртуальные принтеры не выдают нужный результат, проанализируем использование Ghostscript. Это мощный движок, который может пересобрать любой PDF в строгий PDF/A. Этот метод наиболее эффективен в среде Windows Server 2003/2008.
Рассмотрим шаги реализации:
PDFA_def.ps, в котором прописываем ICC-профиль и метаданные.Ghostscript через КомандаСистемы.Посмотрим на пример командной строки, которую должна сформировать 1С:
ПутьКГхостскрипту = "C:\gs\gs9.05\bin\gswin32c.exe";
ФайлОпределений = "C:\gs\PDFA_def.ps";
ВходнойФайл = "C:\temp\input.pdf";
ВыходнойФайл = "C:\temp\output_pdfa.pdf";
Команда = ПутьКГхостскрипту + " -dPDFA=1 -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" + ВыходнойФайл + " " + ФайлОпределений + " " + ВходнойФайл;
КомандаСистемы(Команда);
Важный нюанс: В файле PDFA_def.ps обязательно должен быть указан путь к файлу цветового профиля (например, sRGB.icc). Без этого валидаторы, такие как VeraPDF, будут выдавать ошибку соответствия стандарту.
Чтобы минимизировать ошибки при конвертации, разберем правила подготовки таблиц в 1С 7.7:
BMP или JPG без прозрачности. Прозрачность в формате PNG при печати через старые драйверы может привести к непредсказуемым результатам в PDF/A-1.Для продвинутых разработчиков существует вариант использования библиотеки iTextSharp. Хотя 1С 7.7 не поддерживает .NET напрямую, мы можем создать COM-видимую обертку (Wrapper) на C#. Эта библиотека позволяет программно манипулировать структурой PDF: добавлять метаданные XMP, внедрять шрифты и устанавливать флаг соответствия PDF/A.
Проанализируем логику работы такой обертки:
PdfReader.PdfStamper, который записывает метаданные.PdfWriter.SetInputDefaultColorSpace.Этот способ требует навыков программирования на C#, но обеспечивает 100% результат при прохождении автоматизированных проверок в контролирующих органах.
Если ваш файл все равно не проходит проверку, воспользуйтесь специализированными инструментами валидации. Это поможет понять, чего именно не хватает файлу: внедренных шрифтов, цветового профиля или корректной структуры метаданных. Чаще всего в 1С 7.7 проблема кроется в драйвере принтера, который подменяет встроенные шрифты на системные «заглушки», что недопустимо для стандарта PDF/A.
Подводя итог, наиболее сбалансированным решением для 1С 7.7 является связка Йоксель + Ghostscript. Это позволяет избежать проблем с очередями печати виртуальных принтеров и дает полный контроль над итоговым форматом документа.