Почему при сохранении в PDF из 1С обрезаются последние буквы справа и как это исправить?

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

Многие специалисты и пользователи платформы 1С сталкиваются с неприятной ситуацией: при формировании печатной формы на экране всё выглядит идеально, при печати на физический принтер — тоже без нареканий, но стоит только сохранить документ в формат PDF встроенными средствами («Файл» — «Сохранить как...»), как в полученном файле у строк пропадают последние буквы или символы справа. Давайте разберем эту проблему детально, выясним её технические причины.

Суть проблемы и симптомы

Ситуация, как правило, развивается по следующему сценарию: пользователь формирует стандартный отчет или печатную форму (например, Счет-фактуру, Акт или Торг-12). Визуальный контроль в режиме предприятия не выявляет ошибок. Однако, когда этот документ отправляется контрагенту в формате PDF, получатель видит обрезанный текст в некоторых ячейках.

Обычно «пострадавшими» оказываются ячейки, содержащие многострочный текст или длинные наименования номенклатуры. Характерные признаки:

  1. Обрезается только правая часть строки (последняя буква или даже половина буквы).
  2. Изменение масштаба при просмотре PDF не помогает.
  3. Уменьшение шрифта в макете иногда помогает, но не гарантирует результат на 100%.
  4. Проблема может проявляться или исчезать после обновления платформы.

Техническая причина: конфликт рендеринга

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

Когда 1С отображает форму на экране или отправляет на печать через драйвер Windows, используются системные библиотеки GDI/DirectWrite. Они определенным образом рассчитывают ширину каждого символа и пробела. Однако, когда мы используем функцию «Сохранить как PDF», в дело вступает внутренний механизм платформы 1С для генерации PDF-документов.

Основной виновник — свойство ячейки Горизонтальное положение: По ширине (Justify). Чтобы растянуть текст от края до края, система увеличивает пробелы между словами. Внутренний конвертер PDF в 1С иногда рассчитывает суммарную длину такой растянутой строки с погрешностью (особенно если используется форматированный документ), из-за чего текст выходит за невидимую границу ячейки и отсекается маской (clipping mask) в самом PDF-файле.

Решение №1: Настройка свойств ячеек (Самый надежный метод)

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

Вариант А: Использование отступа

Это «магическое» решение, которое помогает в 99% случаев без визуального ухудшения макета. Нам нужно принудительно сказать платформе, что текст не должен доходить до самой правой границы ячейки.

Рассмотрим порядок действий:

  1. Откройте макет печатной формы в Конфигураторе.
  2. Выделите проблемные области (ячейки с текстом, который обрезается). Обычно это объединенные ячейки с наименованием товаров или услуг.
  3. Откройте палитру свойств (через контекстное меню или нажав Alt+Enter).
  4. Найдите раздел Оформление.
  5. Найдите свойство Отступ справа (Right Indent).
  6. Установите значение 1 или 2.

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

Вариант Б: Отказ от выравнивания по ширине

Если строгий дизайн документа не требует выравнивания по обоим краям, самым простым решением будет смена типа выравнивания.

  1. В свойствах ячейки найдите параметр Горизонтальное положение.
  2. Измените значение с По ширине на Левый край.

При выравнивании по левому краю пробелы между словами имеют фиксированный размер, и расчет длины строки в PDF происходит корректно.

Решение №2: Программная корректировка табличного документа

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

Рассмотрим пример кода, который проходит по области печати и устанавливает отступ для всех ячеек, где включено выравнивание по ширине:


// Пример процедуры для обработки табличного документа перед выводом
Процедура ИсправитьОбрезаниеТекстаPDF(ТабДокумент) Экспорт
    
    // Получаем используемую область
    ВысотаТаблицы = ТабДокумент.ВысотаТаблицы;
    ШиринаТаблицы = ТабДокумент.ШиринаТаблицы;
    
    // Перебираем область (в реальных задачах лучше перебирать только значимые области)
    Область = ТабДокумент.Область(1, 1, ВысотаТаблицы, ШиринаТаблицы);
    
    // Если нужно массово установить отступ для конкретной области
    // Но лучше проверять свойство ГоризонтальноеПоложение
    
    // Более точечный подход требует обхода ячеек, что может быть медленно для больших отчетов.
    // Поэтому чаще применяют изменение конкретного стиля или параметров области при выводе.
    
    // Пример установки отступа для всей области (если дизайн позволяет):
    Область.ОтступСправа = 1;

КонецПроцедуры

Однако, более эффективно задавать свойство ОтступСправа непосредственно в макете, как описано в Решении №1.

Решение №3: Использование виртуальных принтеров (Workaround)

Если у вас нет возможности править конфигурацию (например, базовая версия или запрет на изменения), или проблема возникает спорадически, можно изменить способ создания PDF.

Вместо использования меню «Файл — Сохранить как... — Документ Adobe PDF», используйте печать на виртуальный принтер.

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

  1. Нажмите «Файл — Печать» (или Ctrl+P).
  2. В списке принтеров выберите Microsoft Print to PDF (встроен в Windows 10/11) или сторонние аналоги (Bullzip PDF Printer, doPDF, CutePDF).
  3. Нажмите «Печать».
  4. Система предложит выбрать место для сохранения файла.

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

Решение №4: Обновление платформы

Разработчики 1С знают об этой проблеме. В различных версиях платформы ошибка регистрировалась и исправлялась (например, ошибка № 10230477).

Если ваша версия платформы устарела, мы рекомендуем обновиться. По информации из баг-трекера, исправления вносились в версиях:

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

Решение №5: Настройка параметров страницы (Костыль)

В некоторых случаях, если обрезание происходит по самому краю страницы (а не внутри ячеек в центре листа), помогает изменение полей документа.

Попробуйте выполнить следующие настройки:

  1. В режиме просмотра печатной формы выберите «Файл — Параметры страницы».
  2. Увеличьте значение поля Справа (например, установите 10 мм вместо 5 мм).
  3. Убедитесь, что параметр Масштаб установлен в «По ширине страницы».

Это может помочь, если текст «вылезает» за физические границы печатного листа при конвертации.

Итоги

Давайте резюмируем. Если вы столкнулись с обрезанием текста справа при сохранении в PDF из 1С, действуйте в таком порядке:

  1. Быстрое решение для пользователя: Используйте печать на принтер «Microsoft Print to PDF».
  2. Правильное решение для разработчика: Откройте макет печатной формы, найдите ячейки с выравниванием «По ширине» и установите им свойство Отступ справа = 1. Это навсегда решит проблему, независимо от версии платформы.
  3. Системное решение: Проверьте актуальность релиза платформы 1С:Предприятие.
← На главную