Печать этикеток со штрих-кодом с веб-страницы - PullRequest
13 голосов
/ 02 октября 2008

Я работаю над веб-приложением ASP.Net, которое должно печатать динамически созданные этикетки на стандартных листах этикеток в стиле Avery (один определенный размер, поэтому только один общий макет). Метки имеют различное количество строк (3-6) и могут содержать либо строки текста, либо графическое изображение штрих-кода.

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

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

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

Мы собираемся перейти к созданию вывода Word, Excel или PDF, что займет довольно много времени на разработку и, возможно, добавит дополнительные шаги в процессе печати. ​​

Итак, есть ли у кого-нибудь предложения о том, как сделать макет HTML / CSS, который будет точно отображаться на разных типах принтеров? Мне действительно все равно, если разрывы строк / слов немного отличаются, но мне нужно иметь возможность предсказуемо расположить верхние левые углы каждой области надписи.

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

Небольшое обновление: Прямо сейчас я делаю несколько тестов с абсолютным позиционированием - устанавливаю только верхнюю и левую координаты элемента, содержащего блок. Пока что есть незначительные отклонения смещения на странице (поля, выравнивание бумаги и т. Д.), Но все протестированные браузеры и принтеры помещают элементы в точно в правильных местах относительно друг с другом. Я ценю советы в формате PDF, но кто-нибудь знает о дополнительных "хитростях" при использовании абсолютного позиционирования таким образом?

Обновление: Для записи я переписал часть печати этикеток, используя iTextSharp, и она отлично работает - определенно, способ сделать это в будущем ...

Ответы [ 10 ]

28 голосов
/ 02 октября 2008

Забудьте HTML и создайте PDF. HTML-печать чрезвычайно разнообразна - не только в разных браузерах, но и в разных версиях одного и того же браузера. PDF намного проще.

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

5 голосов
/ 02 октября 2008

Интернет не является форматом, который гарантированно дает согласованные результаты печати. Учитывая стандартную поддержку печати этикеток в MS Word и относительную простоту автоматизации и генерации, я настоятельно рекомендую пойти по этому пути.

Мне неизвестен ЛЮБОЙ метод получения точной печати во всех типах браузеров, операционных систем и принтеров при использовании веб-контента.

3 голосов
/ 02 октября 2008

У меня была похожая проблема, и ответ: вы не можете это сделать. Вместо этого я сгенерировал файл PDF в режиме реального времени с помощью iTextSharp и передал его в ответ.

3 голосов
/ 02 октября 2008

«точно» и «печать» - это не два слова, которые действительно хорошо работают вместе. Я подал заявку OCR / OMR год назад или около того, и даже при создании PDF-файла я видел существенные различия между различными драйверами печати и тому подобным. Из-за этого я хочу сказать вам, что у вас может не быть 100% успеха.

Если проблемы с CSS и макетом не работают так хорошо, возможно, вам придется прибегнуть к созданию меток в виде изображений с использованием GDI + - по крайней мере, таким образом вы можете использовать GetFontMetrics () и т. Д.

Удачи!

2 голосов
/ 13 ноября 2015

Я переписал код SharpPDFLabel, который был упомянут еще в 2011 году на этой неделе, так как мне нужно было сделать его более гибким (и работать с текущей библиотекой iTextSharp).

Вы можете получить его здесь: https://github.com/finalcut/SharpPDFLabel

Я добавил возможность указывать содержимое каждого отдельного ярлыка, если хотите (или продолжить создание листа одинаковых ярлыков). Расширяя класс LabelDefinition, вы можете довольно легко указать расположение ваших ярлыков.

2 голосов
/ 16 октября 2008

Используя SQL Server Reporting Services, я генерирую PDF для отправки на принтер, но его можно увидеть на экране как HTML, используя элемент управления, который вы можете включить в свои веб-страницы. В Интернете есть файлы RDLC, которые можно распечатать в различных форматах Avery.

1 голос
/ 15 ноября 2011

Я также боролся с подходом HTML / CSS из-за несовместимого поведения печати во всех браузерах.

Я создал библиотеку C # для производства ярлыков Avery из ASP.NET, которые, я надеюсь, вам могут пригодиться:

https://github.com/wheelibin/SharpPDFLabel#readme

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

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

Приветствия

0 голосов
/ 17 декабря 2011

Я только что прошел через то же самое. Закончилось переключение и создание небольшого небольшого приложения JSF (работающего на Glassfish), которое использует JasperReports для печати непосредственно на принтер этикеток. Нажимная кнопка, мгновенная наклейка на принтере, даже не нужно просматривать ее на экране, если вы этого не хотите, так как Jasper может напрямую выводить на принтер (а также PDF в браузере).

0 голосов
/ 03 октября 2008

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

Я сделал это несколько лет назад, когда мы использовали HTML и PDF для получения квитанций о подтверждении. HTML в порядке, но зависит от веб-браузера конечных пользователей, поэтому мы быстро избавились от этого метода. PDF-файлы хороши, если у них есть программа для чтения PDF-файлов, чего, к нашему удивлению, многие наши клиенты не имеют. Так что это было сброшено также после того, как мы переключились на версию FLASH, используя простой флэш-фильм, который включал несколько динамических текстовых областей и кнопку «печать». Я передал данные между страницей и флэш-памятью, используя несколько флэш-переменных. Вы также можете использовать веб-сервис.

Когда мне нужно нечто большее, чем просто текст, я использую бесплатную версию сообщества компонента Генератор PDF от DynamicPDF.com . Он отлично работает и очень быстро.

0 голосов
/ 02 октября 2008

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

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