Многие специалисты и пользователи платформы 1С сталкиваются с неприятной ситуацией: при формировании печатной формы на экране всё выглядит идеально, при печати на физический принтер — тоже без нареканий, но стоит только сохранить документ в формат PDF встроенными средствами («Файл» — «Сохранить как...»), как в полученном файле у строк пропадают последние буквы или символы справа. Давайте разберем эту проблему детально, выясним её технические причины.
Ситуация, как правило, развивается по следующему сценарию: пользователь формирует стандартный отчет или печатную форму (например, Счет-фактуру, Акт или Торг-12). Визуальный контроль в режиме предприятия не выявляет ошибок. Однако, когда этот документ отправляется контрагенту в формате PDF, получатель видит обрезанный текст в некоторых ячейках.
Обычно «пострадавшими» оказываются ячейки, содержащие многострочный текст или длинные наименования номенклатуры. Характерные признаки:
Прежде чем мы перейдем к правкам, давайте поймем, почему это происходит. Проблема кроется в разнице алгоритмов отрисовки шрифтов.
Когда 1С отображает форму на экране или отправляет на печать через драйвер Windows, используются системные библиотеки GDI/DirectWrite. Они определенным образом рассчитывают ширину каждого символа и пробела. Однако, когда мы используем функцию «Сохранить как PDF», в дело вступает внутренний механизм платформы 1С для генерации PDF-документов.
Основной виновник — свойство ячейки Горизонтальное положение: По ширине (Justify). Чтобы растянуть текст от края до края, система увеличивает пробелы между словами. Внутренний конвертер PDF в 1С иногда рассчитывает суммарную длину такой растянутой строки с погрешностью (особенно если используется форматированный документ), из-за чего текст выходит за невидимую границу ячейки и отсекается маской (clipping mask) в самом PDF-файле.
Если у вас есть возможность изменить макет (в конфигураторе или как внешнюю печатную форму), то этот способ является наиболее правильным. Мы проанализируем два варианта настройки.
Вариант А: Использование отступа
Это «магическое» решение, которое помогает в 99% случаев без визуального ухудшения макета. Нам нужно принудительно сказать платформе, что текст не должен доходить до самой правой границы ячейки.
Рассмотрим порядок действий:
Alt+Enter).Даже минимальный отступ заставляет алгоритм экспорта PDF резервировать небольшое пространство, что компенсирует погрешность в расчетах ширины символов.
Вариант Б: Отказ от выравнивания по ширине
Если строгий дизайн документа не требует выравнивания по обоим краям, самым простым решением будет смена типа выравнивания.
При выравнивании по левому краю пробелы между словами имеют фиксированный размер, и расчет длины строки в PDF происходит корректно.
Если вы программист и формируете табличный документ кодом (или хотите исправить проблему массово для всего документа перед показом), можно использовать программный обход.
Рассмотрим пример кода, который проходит по области печати и устанавливает отступ для всех ячеек, где включено выравнивание по ширине:
// Пример процедуры для обработки табличного документа перед выводом
Процедура ИсправитьОбрезаниеТекстаPDF(ТабДокумент) Экспорт
// Получаем используемую область
ВысотаТаблицы = ТабДокумент.ВысотаТаблицы;
ШиринаТаблицы = ТабДокумент.ШиринаТаблицы;
// Перебираем область (в реальных задачах лучше перебирать только значимые области)
Область = ТабДокумент.Область(1, 1, ВысотаТаблицы, ШиринаТаблицы);
// Если нужно массово установить отступ для конкретной области
// Но лучше проверять свойство ГоризонтальноеПоложение
// Более точечный подход требует обхода ячеек, что может быть медленно для больших отчетов.
// Поэтому чаще применяют изменение конкретного стиля или параметров области при выводе.
// Пример установки отступа для всей области (если дизайн позволяет):
Область.ОтступСправа = 1;
КонецПроцедуры
Однако, более эффективно задавать свойство ОтступСправа непосредственно в макете, как описано в Решении №1.
Если у вас нет возможности править конфигурацию (например, базовая версия или запрет на изменения), или проблема возникает спорадически, можно изменить способ создания PDF.
Вместо использования меню «Файл — Сохранить как... — Документ Adobe PDF», используйте печать на виртуальный принтер.
Рассмотрим алгоритм действий пользователя:
Ctrl+P).Почему это помогает?
В этом случае формирование изображения берет на себя драйвер печати Windows, который работает идентично тому, как если бы вы печатали на бумагу. Поскольку на бумаге текст не обрезается, он корректно попадет и в PDF-файл.
Разработчики 1С знают об этой проблеме. В различных версиях платформы ошибка регистрировалась и исправлялась (например, ошибка № 10230477).
Если ваша версия платформы устарела, мы рекомендуем обновиться. По информации из баг-трекера, исправления вносились в версиях:
Однако стоит помнить, что ошибки рендеринга могут возвращаться в новых релизах (регрессия), поэтому обновление не всегда гарантирует стабильный результат без применения настройки макетов.
В некоторых случаях, если обрезание происходит по самому краю страницы (а не внутри ячеек в центре листа), помогает изменение полей документа.
Попробуйте выполнить следующие настройки:
Это может помочь, если текст «вылезает» за физические границы печатного листа при конвертации.
Давайте резюмируем. Если вы столкнулись с обрезанием текста справа при сохранении в PDF из 1С, действуйте в таком порядке: