Работа с очень высокими текстовыми полями и нумерацией страниц в SSRS 2005 - PullRequest
1 голос
/ 24 июня 2010

У меня есть отчет в SQL Server Reporting Services 2005. Он использует верхний и нижний колонтитулы страницы и не содержит вложенных отчетов. Часть тела содержит несколько меньших элементов, а затем простую таблицу из одного столбца. Таблица имеет одну строку заголовка и одну строку подробностей. Заголовок - это просто метка. Строка сведений представляет собой одно текстовое поле с простыми полями! FieldName.Value в качестве выходных данных.

Проблема в том, что FieldName, в данном случае, является строкой переменной длины. Это может быть предложение длиной до 8000 символов (обычно не более 2 страниц). Текст может содержать разрывы строк / абзацев (возвраты), но без специального форматирования Все хорошо, пока содержание помещается на одной странице. Как только текст превышает одну страницу (8,5x11), текст очень неприятно обрезается. Поскольку это проблема разбиения на страницы, она видна только при экспорте в PDF или при просмотре отчета в макете печати. ​​

Кажется, что максимальный размер строки может увеличиваться на первой странице, а затем он обрезает ее и запускает на второй. Но это сокращение не тщательно управляется по отношению к тексту. Это может произойти прямо в середине строки, заставляя показывать верхние половины букв на первой странице и нижние половины в верхней части второй страницы.

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

Вторичная проблема заключается в том, что мне бы очень хотелось, чтобы заголовок строки таблицы повторялся на каждой странице. Установка очевидного свойства «RepeatOnNewPage» не имеет никакого эффекта. Я подозреваю, что это потому, что он все еще пытается показать один действительно вертикально высокий ряд. Кажется, что все в порядке, повторяя заголовки и хорошо разделяя страницы между строками деталей. Но поскольку это в основном просто большой блок текста и, следовательно, всего одна действительно высокая строка, он не разделяется на части.

Что я могу сделать или использовать для решения этой проблемы? Я могу жить без повторяющегося заголовка, если только он не обрезает текст в середине строки.

Ответы [ 4 ]

1 голос
/ 24 июня 2010

К сожалению, точная настройка разрыва страницы является одним из самых больших слабых мест SSRS.

Я могу только предложить разбить длинный текст на несколько строк, прежде чем SSRS его получит.Вы хотели бы проанализировать текст, чтобы найти разрывы слов.Результатом будут странно выглядящие разрывы в выводе, так как вы не будете знать, где разрыв появится на строке в печатном отчете.Тем не менее, это было бы гораздо более читабельным, чем разрезать текст пополам.

Если текст состоит из разумных по размеру абзацев, вы можете вместо этого разобрать его таким образом.

Вы могли бы даже пойтинастолько, чтобы измерить текст, используя SQLCLR и метод System.Drawing.Graphics.MeasureString для точной настройки вывода, но я бы не рекомендовал этот маршрут для финта сердца.

0 голосов
/ 17 января 2012

В SSRS 2008 R2 и Visual Studio 2008:

Щелкните (не правой кнопкой мыши) текстовое поле и перейдите в окно свойств (в нижней правой части VS) -> KeepTogether = false.

Текст будет аккуратно разрезан между строк и продолжится на следующей странице.

Просто подумал, что добавить сюда, так как поиск этого не дает много результатов.

0 голосов
/ 29 июня 2010

В конце концов, проблема с обрезанным текстом была вызвана нестандартным заполнением для рассматриваемого текстового поля.

По какой-то причине казалось, что заполнение больше значений по умолчанию (2pt вокруг)заставить его нумерацию страниц сгореть.Я предполагаю, что это происходит из-за того, что алгоритм не учитывает отступы при принятии решения, где разбивать абзац.При использовании отступов по умолчанию линия всегда заканчивается чисто и красиво на каждой странице.

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

Тем не менее, много ненужной головной боли.

0 голосов
/ 26 июня 2010

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

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

...