Как выполнить расширенную печать из веб-приложения?

Я изучал варианты печати данных, подобных отчету, через веб-приложение. Некоторые варианты, которые являются жизнеспособными, включают запись PDF-файлов, Excel XML, выгрузку HTML в Excel или использование такого инструмента, как activePDF webGrabber. Я предполагаю, что вопрос в том, какие решения дают контроль над печатью из браузера (IE в моем случае), но не имеют большого времени на разработку. Хотя у меня самого нет опыта, я видел ужасный код для создания PDF-файлов.

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

Любые советы (особенно из опыта) приветствуются.


person Greg Ogle    schedule 23.10.2008    source источник


Ответы (9)


Поскольку я уже спрашивал об этом здесь и выяснил на собственном горьком опыте, вы не Мы собираемся получить надежные и точные результаты печати только в браузере. Даже если это интранет-приложение, которое, как вам обещали, должно работать только с IE7, IE8 скоро выйдет, а затем будет разрешен Firefox, и все ваше тщательное микроменеджмент CSS будет напрасным (звучит горько?).

Самое дальновидное решение - перекусить пулю и заняться созданием PDF-файлов. Инструменты, о которых вы упомянули, хороши. Вам также следует взглянуть на iText и iTextSharp. Как только вы освоитесь, делать макеты PDF не сложнее, чем HTML и CSS, и вы будете знать, что результаты будут правильно распечатываться на всех компьютерах, в браузерах и на всех принтерах. В настоящее время я работаю с iTextSharp (еще не закончил, но все еще учусь и экспериментирую).

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

Боковая панель «Связанные вопросы» очень полезна. Я видел эти вопросы об управлении принтером с веб-страницы (оба с ответами, равными «вы не можете»):

Программный выбор Альбомная печать

Печать на конкретном принтере

person CMPalmer    schedule 23.10.2008
comment
Просто проголосуйте и прокомментируйте, чтобы сказать, что iTextSharp великолепен. Я тоже использовал это с большим успехом. - person Dillie-O; 24.10.2008
comment
На самом деле я считаю, что Firefox 3 работает намного лучше, чем IE. Однако Firefox 2 действительно отстой. - person Milan Babuškov; 03.03.2009

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

На некоторых сайтах будет ссылка на «версию для печати», но даже наличие ссылки как на отображение, так и на таблицу стилей печати в заголовке HTML будет работать, если пользователь решит просто нажать CTRL + P на странице, на которой он находится.

person Dillie-O    schedule 23.10.2008
comment
Это правильный подход, если вы не ищете очень точные и воспроизводимые макеты печати, такие как формы или где-либо еще, где вам нужно выровнять результаты. Он также спросил о выбираемых пользователем портретной или альбомной ориентации, и этот маршрут требует от пользователя настройки параметров печати, что является отрывочной идеей. - person CMPalmer; 24.10.2008
comment
См. Это: stackoverflow.com/questions/37162/ - person CMPalmer; 24.10.2008

Я использовал и мне повезло с iTextSharp в приложении C #. Это требует некоторой работы, но если у вас есть опыт работы с графикой, все это имеет смысл, и PDF-файл может выглядеть действительно хорошо (и хорошо распечатываться).

http://itextsharp.sourceforge.net/

Если вы хотите, чтобы код для создания PDF не выглядел ужасно, просто убедитесь, что вы написали хороший код PDF! Например, напишите действительно модульный код с множеством классов в памяти, которые вы комбинируете (например, Lego) для представления объектов, которые будут помещены в PDF. Этим объектам просто нужно знать, как нарисовать себя в PDF.

person Jared Updike    schedule 23.10.2008

Вы можете взглянуть на службы отчетов SQL Server. Также существует ряд сторонних инструментов для создания отчетов, например http://www.devexpress.com/Products/NET/Reporting/

person Craig    schedule 23.10.2008

Я не уверен, что это то, что вы ищете, но почему бы просто не использовать CSS с таблицей стилей media = print. Создайте свою таблицу стилей так, чтобы печатная форма имела желаемые характеристики. Кроме того, вы можете выполнить экспорт в Excel, загрузив данные в формате CSV и позволив пользователю создавать свои собственные отчеты на основе данных.

Для реальных PDF и Excel я использовал элементы управления с Aspose.com.

person tvanfosson    schedule 23.10.2008
comment
Если данные представлены в виде таблиц, вариант экспорта в Excel отлично подходит. Независимо от того, как вы представляете свои данные, кто-то другой захочет разрезать, нарезать кубиками, цветным кодом и построить что-то из них - разрешение им загрузить Excel (или просто CSV) позволяет все это. - person CMPalmer; 24.10.2008
comment
Да, но моему генеральному директору это не нравится. Он предпочитает, чтобы отчет распечатывался после нажатия кнопки «Печать». - person Salamander2007; 24.10.2008

Работает только для IE:

http://www.meadroid.com/scriptx/index.asp

Абсолютный контроль для тех, кому нужно печатать html-документы с клиентских и серверных компьютеров, на которых установлен браузер Microsoft Internet Explorer.

Базовый набор функций печати ScriptX - настройки верхнего и нижнего колонтитула, ориентация печати, грубое управление полями и команда печати окна / фрейма браузера - доступен бесплатно и распространяется бесплатно. Расширенные функции печати не бесплатны. Документы с поддержкой ScriptX должны ссылаться на действующую лицензию на публикацию, чтобы расширенная печать работала.

person jeremib    schedule 24.10.2008

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

Я думаю, что лучший способ - это динамическое создание PDF-файлов на лету. Найдите пакет PDF, который вам нравится / можете себе позволить для вашей платформы, и запускайте его. Поверьте мне, вы будете рады, что сделали.

person Electrons_Ahoy    schedule 24.10.2008

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

Мы добились хороших результатов, используя PDFLib, чтобы легко создавать привлекательные документы PDF. Используя свои серверные модули, вы можете попросить дизайнера создать ваш документ в InDesign или Illustrator, а затем программно добавить динамические поля сверху (даже используя Acrobat для размещения полей)

С отчетами и динамическими строковыми данными это немного сложнее, но это можно сделать.

Для фактической печати - если вы создаете приложение, когда известна ваша база пользователей (например, офисная среда), вы можете рассмотреть приложение для печати этикеток, например BarTender. Вы можете сделать так, чтобы веб-сервер вызывал задания на печать через API, или приложение BarTender опрашивало приложение на предмет новых заданий. Удобно для веб-приложений, когда вы хотите нажать «Печать» на сайте, и принтер начнет печать (без вмешательства пользователя), поскольку на самом деле печать выполняет сервер, а не клиент.

person Community    schedule 24.10.2008

В основном, чтобы поделиться тем, как я с этим справился, но также чтобы предложить другой вариант ...

Я использовал стороннюю сетку, которая экспортировала Excel XML. Чтобы заставить его работать для меня, я использовал XSLT и некоторый код для настройки этого XSLT, чтобы ввести параметры печати. Я уверен, что он не такой мощный, как PDF, но это был довольно приличный компромисс, который не требовал особой настройки для каждой страницы.

Итак, основное решение состоит в том, чтобы экспортировать в формате Excel XML и вставлять теги для ориентации страницы, масштабирования и всего, что вам может понадобиться. Вы можете начать с простого листа Excel и сохранить его как XML, внося необходимые изменения. Затем вы читаете исходный код и выясняете, как это удалось в Excel. Мне не удалось найти никакой полезной документации.

person Greg Ogle    schedule 03.02.2009