Как предотвратить разрыв длинной гиперссылки при преобразовании макета 1С в PDF

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

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

Почему 1С "разрывает" ссылку при экспорте?

Для начала выясним причину. Внутренний механизм платформы 1С при формировании PDF-файла обрабатывает гиперссылки не как логическую связь с текстом, а как «аннотацию» — специальную прямоугольную область (Link Annotation), наложенную поверх визуального содержимого. Если текст в ячейке ТабличныйДокумент не помещается в одну строку и переносится, движок генерации PDF зачастую не может корректно рассчитать сложную геометрическую форму кликабельной зоны для двух строк сразу. В результате создается прямоугольник только для первой строки.

Кроме того, существует внутреннее ограничение на длину строки в некоторых версиях платформы (около 255–512 символов), а также влияние параметра Fast Web View (линеаризация PDF), который может принудительно обрезать URI-объекты для оптимизации документа. Рассмотрим по шагам, как мы можем обойти эти ограничения.

Способ 1: Использование минимально допустимого размера шрифта

Как показывает практика и обсуждение на форуме, самый простой «быстрый» метод — сделать так, чтобы ссылка физически не переносилась на вторую строку. Если требования заказчика позволяют небольшое визуальное изменение, мы можем программно уменьшить размер шрифта именно для ячейки со ссылкой.

Проанализируем пример кода, который динамически подбирает размер шрифта:


// Пример управления размером шрифта для предотвращения переноса
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаСГиперссылкой");
ТекущаяЯчейка = ОбластьМакета.Области.ТекстСсылки;

// Если ссылка слишком длинная, установим мелкий шрифт
Если СтрДлина(ДлиннаяСсылка) > 100 Тогда
    ТекущаяЯчейка.Шрифт = Новый Шрифт(ТекущаяЯчейка.Шрифт, , 6); // Устанавливаем размер 6
КонецЕсли;

ТекущаяЯчейка.Текст = ДлиннаяСсылка;
ТекущаяЯчейка.Гиперссылка = Истина;

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

Способ 2: Переход на HTML-макеты для формирования PDF

Если нам критично сохранить читаемый размер шрифта и обеспечить многострочность, наиболее надежным решением будет использование HTML-рендеринга. В отличие от табличного документа, который оперирует ячейками и координатами, HTML привязывает ссылку к DOM-элементу <a>. Современные версии платформы 1С (8.3.14 и выше) при сохранении HTML в PDF гораздо качественнее обрабатывают переносы строк в ссылках.

Разберем алгоритм действий:

  1. Создадим макет с типом "Текстовый документ" или используем строку для формирования HTML-кода.
  2. Оформим ссылку стандартным тегом.
  3. Используем метод Записать() для сохранения результата.

// Формируем HTML-код с длинной ссылкой
ТекстHTML = "<html><body>";
ТекстHTML = ТекстHTML + "<p>Нажмите на ссылку для перехода:</p>";
ТекстHTML = ТекстHTML + "<a href='" + ДлиннаяСсылка + "' style='font-size: 12pt;'>" + ДлиннаяСсылка + "</a>";
ТекстHTML = ТекстHTML + "</body></html>";

// Записываем во временный файл как HTML, затем конвертируем
ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf");
// В современных версиях можно использовать ПолеHTMLДокумента для печати в PDF
// или специализированные библиотеки.

Способ 3: Отключение параметра Fast Web View

Если ссылка обрезается именно на уровне 255 символов, стоит обратить внимание на настройки PDF-конвертера. Параметр Fast Web View (быстрый просмотр в Web) оптимизирует структуру файла, но иногда "калечит" длинные URI.

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

Способ 4: Хак с прозрачным наложением (Invisible Overlay)

Если заказчик требует, чтобы текст был крупным и многострочным, но при этом ссылка работала, мы можем прибегнуть к хитрости. Мы выводим визуальный текст (который может разрываться), а "под него" или "над ним" помещаем невидимую область с той же ссылкой, но сжатую в одну строку.

Рассмотрим, как это реализовать:

Важное примечание: Этот метод требует аккуратности, так как при конвертации в PDF порядок слоев может измениться, и "прозрачная" ссылка может перекрыть основной текст, либо наоборот — оказаться недоступной для клика. Проанализируйте результат в разных просмотрщиках (Acrobat Reader, Chrome, macOS Preview), так как они по-разному интерпретируют слои PDF.

Способ 5: Дублирование через QR-код

Как было отмечено в сообщении 10, хорошим тоном является дополнение длинной текстовой ссылки QR-кодом. Это не решает проблему кликабельности текста напрямую, но обеспечивает 100% гарантию того, что пользователь сможет открыть ссылку, даже если PDF-документ будет распечатан на бумаге или ссылка в цифровом виде "сломается".


// Пример добавления QR-кода (используя стандартные средства БСП)
ПараметрыQR = УправлениеПечатью.ПараметрыГенерацииШтрихкода();
ПараметрыQR.ТипКода = 16; // QR
КартинкаQR = УправлениеПечатью.СформироватьШтрихкод(ДлиннаяСсылка, ПараметрыQR);
ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQR;

Выводы и рекомендации

Подводя итог, выясним лучший алгоритм действий. Если ваша задача — обеспечить работу ссылки без использования внешних библиотек и "костылей" вроде установки Microsoft Office на сервер, рекомендуем придерживаться следующей стратегии:

  1. Попробуйте максимально уменьшить шрифт в ячейке со ссылкой до 6-7 кегля, чтобы она уместилась в одну строку. Это самый стабильный вариант для встроенного движка 1С.
  2. Если ссылка не умещается даже мелким шрифтом — используйте HTML-макет. Это потребует переработки макета, но решит проблему корректного рендеринга многострочных объектов Link в PDF.
  3. Всегда добавляйте QR-код в качестве резервного способа перехода, особенно для документов, которые могут быть распечатаны.

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

← На главную