Создание отчетов в Silverlight (в формате PDF или отправка на принтер) - PullRequest
5 голосов
/ 09 февраля 2011

Недавно я попытался сгенерировать отчеты в Silverlight 4. В моей проблемной области эти отчеты либо должны отправляться непосредственно на принтер, и / или клиентское приложение SL создает PDF-файл и позволяет пользователю где-то его хранить.

Что касается отчета, он примерно состоит из 50% текстового потока (включая перечисления), 30% таблиц и 20% диаграмм.Часть потока текста делает его немного более сложным, так как должен произойти правильный разрыв строки.

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

  • Собственный Silverlight PrintDocument: технически существуют две основные проблемы.С одной стороны, заставить работать разрывы страниц и печатать на них элементы UIE с надлежащей версткой, что является грязным занятием и полным компромиссов;К счастью, это та часть, которую мне удалось получить до сих пор.Однако класс PrintDocument всегда отрисовывает все визуальные эффекты как растровые изображения перед их отправкой;Это не так весело, если вы используете принтер PDF и надеетесь, что сможете искать / выбирать текст.Подход Дэвида Полла в «Silverlight and Beyond» [1] оказался не таким полезным, так как по своей сути придерживается того же подхода и, следовательно, страдает от очень похожих проблем.

  • silverPDF [2] : плохо документированная библиотека, которая требует выполнения большей части макета вручную (прежний подход позволил мне, по крайней мере, повторно использовать механизм макета Silverlight).До сих пор я не вижу способа (например) измерить абзацы, и единственный образец с длинным потоковым текстом использует жестко закодированные абсолютные значения для прямоугольников макета.Кроме того, развивающаяся сторона, кажется, неактивна.

Лично я сейчас думаю о совершенно другой стратегии: просто генерировать документы HTML.Но я надеялся, что у сообщества здесь могут быть намеки на два вышеупомянутых подхода или известны другие хорошие подходы.

Заранее спасибо, ~ Мэнни

1 Ответ

5 голосов
/ 09 февраля 2011

Вам нужно сгенерировать отчет на клиенте, или вы можете заставить сервер генерировать его?Ваши варианты лучше, если вы можете создать его на сервере.Лично я считаю, что способ печати Silverlight в настоящее время довольно плох для использования отчетов (отправка каждой страницы на принтер как растровая, а не векторная, что приводит к потенциально огромным объемам данных, передаваемых по сети, и снижению качества печати).Я обнаружил, что лучшей стратегией является создание PDF на сервере (что позволяет вам использовать механизм отчетов) и отображение его в вашем приложении.Есть также несколько коммерческих продуктов (таких как Telerik Silverlight Report Viewer, Report Sharp Shooter или даже Document Toolkit от First Floor Software).Если клиентское решение действительно требуется, возможно, одним из них может быть лучший вариант (хотя качество печати все равно будет низким).Обратите внимание, что Silverlight 5 должен иметь поддержку векторной печати, но до релиза еще 6 месяцев или больше.Еще один вариант - это среда отчетов с открытым исходным кодом Пита Брауна и Дэвида Полла: http://silverlightreporting.codeplex.com/.

Если вы хотите воспользоваться возможностью создания отчета на сервере в виде PDF-файла и отображения его в вашем приложении, я 'Мы написали статью об этом здесь: http://www.silverlightshow.net/items/Building-a-Silverlight-Line-Of-Business-Application-Part-6.aspx. Это не работает для приложений OOB, но исходный код, сопровождающий мою книгу (Pro Business Applications with Silverlight 4), делает: apress.com/book/view/9781430272076.

Надеюсь, это поможет ...

Крис Андерсон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...