Как передать активную гиперссылку из 1С в PDF-файл

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

При формировании прайс-листов, коммерческих предложений или каталогов продукции из 1С часто возникает задача сделать документ интерактивным. Пользователь хочет кликнуть на название товара в полученном PDF-файле и мгновенно перейти на страницу сайта с подробным описанием или в личный кабинет для оформления заказа. Однако стандартная функция Записать() для табличного документа в формат ТипФайлаТабличногоДокумента.PDF часто подводит: текст выглядит как ссылка, но не является кликабельным. Проанализируем, почему так происходит, и разберем по шагам рабочие способы решения этой задачи.

Почему стандартная расшифровка не работает в PDF

Для начала выясним причину проблемы. В системе 1С механизм ПараметрРасшифровки предназначен для внутреннего взаимодействия пользователя с информационной базой. Когда мы открываем печатную форму внутри 1С, клик по ячейке вызывает событие, которое обрабатывает платформа. Но PDF — это статичный формат. Чтобы ссылка стала "живой" внутри PDF, она должна быть прописана в специальном слое файла, который называется слоем аннотаций (Link Annotations). При обычном сохранении из 1С платформа просто переносит графическое начертание букв, не создавая этого интерактивного слоя. Рассмотрим методы, которые позволяют обойти это ограничение.

Способ 1. Использование возможностей современных версий платформы 8.3

Если вы используете платформу версии 8.3.15 и выше, задача упрощается. В современных релизах разработчики 1С значительно доработали движок экспорта. Чтобы ссылка корректно "пробросилась" в PDF, необходимо соблюсти ряд условий в свойствах ячейки табличного документа. Разберем программный пример заполнения такой ячейки:


// Получаем область макета
ОбластьНоменклатура = Макет.ПолучитьОбласть("Строка|Данные");

// Устанавливаем значение и включаем режим гиперссылки
Ячейка = ОбластьНоменклатура.Область(1, 1);
Ячейка.Текст = "Смотреть описание на сайте";

// Важно: свойство Гиперссылка должно быть Истина
Ячейка.Гиперссылка = Истина;

// В расшифровку пишем полный URL с префиксом протокола
Ячейка.Расшифровка = "https://mysite.ru/catalog/item123";

// Выводим область в результирующий документ
ТабДок.Вывести(ОбластьНоменклатура);

Проанализируем этот код. Основной секрет здесь заключается в том, что в Расшифровка должен попадать именно полный URL (обязательно с http:// или https://). Если написать просто адрес сайта, PDF-ридер может его не распознать. После формирования документа используем стандартный метод записи:

ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

Способ 2. Промежуточная конвертация через Microsoft Excel (COM-объект)

Если штатный экспорт 1С не дает нужного результата (например, на старых версиях платформы или при сложной верстке), рассмотрим вариант с использованием Excel. Этот метод считается одним из самых надежных, так как Excel при экспорте в PDF очень корректно формирует слой аннотаций. Посмотрим на алгоритм реализации:

  1. Сохраняем табличный документ 1С во временный файл формата XLSX.
  2. Открываем этот файл через COM-соединение с Excel.
  3. Вызываем метод экспорта Excel в формат PDF.

Пример кода для реализации этого метода:


// 1. Сохраняем из 1С в XLSX
ВременныйXLS = КаталогВременныхФайлов() + "temp_price.xlsx";
ТабДок.Записать(ВременныйXLS, ТипФайлаТабличногоДокумента.XLSX);

// 2. Используем COM-объект для конвертации
Попытка
    ExcelПриложение = Новый COMОбъект("Excel.Application");
    ExcelПриложение.Visible = Ложь;
    ExcelПриложение.DisplayAlerts = Ложь;
    
    Книга = ExcelПриложение.Workbooks.Open(ВременныйXLS);
    
    // Параметр 0 соответствует типу xlTypePDF
    Книга.ExportAsFixedFormat(0, ПутьКPDF);
    
    Книга.Close(Ложь);
    ExcelПриложение.Quit();
Исключение
    Сообщить("Ошибка при работе с Excel: " + ОписаниеОшибки());
КонецПопытки;

Важный момент: для работы этого метода на сервере должен быть установлен Microsoft Excel. Если работа идет в клиент-серверном варианте, убедитесь, что у пользователя, под которым запущены службы 1С, есть права на запуск COM-объектов.

Способ 3. Использование HTML и внешних конвертеров (wkhtmltopdf)

Выясним, как решить задачу без установки платного пакета Microsoft Office. Один из самых профессиональных способов — это транзит через HTML. Этот метод идеально подходит для серверных задач. Разберем шаги:

Сначала сохраняем табличный документ в формате HTML. 1С хорошо справляется с этим, создавая стандартные теги <a href="...">. Затем используем бесплатную утилиту wkhtmltopdf, которая использует движок WebKit для рендеринга страницы в PDF.


// Сохраняем в HTML
ПутьКHTML = КаталогВременныхФайлов() + "report.html";
ТабДок.Записать(ПутьКHTML, ТипФайлаТабличногоДокумента.HTML);

// Формируем строку запуска внешней утилиты
ПутьКПрограмме = "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe";
КомандаЗапуска = """" + ПутьКПрограмме + """ """ + ПутьКHTML + """ """ + ПутьКPDF + """";

// Запускаем конвертацию
ЗапуститьПриложение(КомандаЗапуска, , Истина);

Рассмотрим преимущества этого метода. Во-первых, он полностью бесплатен. Во-вторых, он работает значительно быстрее, чем запуск тяжелого COM-объекта Excel. В-третьих, вы получаете полный контроль над тем, как выглядят ссылки, используя CSS-стили в HTML-макете.

Способ 4. Виртуальные принтеры и автоматическое распознавание

Существуют специализированные виртуальные принтеры, такие как pdfFactory Pro или Bullzip PDF Printer. Они обладают функцией автоматического сканирования текста на наличие строк, начинающихся с "http". Посмотрим, как это работает: вы отправляете документ на печать через ТабДок.Напечатать(), принтер перехватывает поток, находит текстовые совпадения и "накладывает" поверх них невидимые прямоугольники ссылок. Однако этот метод требует предварительной настройки принтера на каждом рабочем месте, что не всегда удобно в крупных организациях.

Рекомендации по оформлению ссылок

Чтобы ссылки в вашем PDF-файле были максимально удобными для пользователя, рекомендуем придерживаться следующих правил:

Подводя итог, можно сказать: если ваша платформа позволяет, используйте прямой экспорт с установленным флагом Гиперссылка. В противном случае наиболее стабильным и гибким решением будет связка 1С -> HTML -> wkhtmltopdf, которая гарантирует стопроцентное сохранение интерактивности вашего документа.

← На главную