Печать ярлыков штрих-кодов с веб-страницы
Я работаю над веб-приложением ASP.Net, которое должно печатать динамически созданные ярлыки на стандартных листах стилей Avery (один конкретный размер, поэтому только один общий макет). Ярлыки имеют переменное количество строк (3-6) и могут содержать либо строки текста, либо изображение графического штрих-кода.
Наш первый разрез, который я унаследовал, использовал моноширинные шрифты для уменьшения проблем с форматированием, но это не позволяло достаточно текста подходить на этикетках, а клиент был недоволен. В основном это был отформатированный текст.
В моей следующей версии TABLEs, DIVs, CSS и несколько JavaScript-вычислений используются для форматирования меток с использованием пропорциональных шрифтов. Он по-прежнему требовал некоторой настройки (пользователь должен был правильно установить поля печати и отключить верхние и нижние колонтитулы), но, похоже, это сработало.
Однако кажется, что существуют некоторые варианты того, как разные принтеры визуализируют текст (WYS не WYG), поэтому, хотя мы тестировали в разных браузерах, используя по крайней мере два разных принтера (струйный принтер и лазерный принтер) некоторые пользовательские ярлыки не выстраиваются в линию. Небольшие вариации полей можно отрегулировать, отрегулировав поля в диалоговом окне настройки страницы, но более сложная проблема заключается в том, что интервал между метками может быть отключен крошечной долей дюйма, так что, если первая метка довольно хорошо центрирована, в конце страницы текст и изображения меток отскакивают сверху или снизу ярлыков.
Мы собираемся перейти к генерации вывода Word, Excel или PDF, который займет довольно много времени разработки и, возможно, добавит дополнительные шаги в процессе печати.
Итак, есть ли какие-либо предложения о том, как сделать макет HTML/CSS, который будет точно отображаться на разных типах принтеров? Меня не волнует, что разрыв строки/слова немного отличается, но мне нужно иметь возможность предсказуемо позиционировать верхние левые углы каждой области ярлыков.
В настоящее время метки стекают по странице в таблице, и мы настраиваем коробчатую модель ячеек и внутренних DIV, чтобы сделать их равномерной высотой. Я подозреваю, что использование абсолютного позиционирования каждого элемента может быть лучшим ответом, но это тоже сложно сделать из-за генерации элементов метки. Если бы я точно знал, что это сработает, я бы предпочел попробовать, а не выбросить все, что нужно, чтобы перейти к методу другого поколения.
Небольшое обновление:
Сейчас я делаю некоторые тесты с абсолютным позиционированием - устанавливая только верхнюю и левую координаты содержащего элемента блока. До сих пор существуют незначительные изменения смещения на странице (поля, выравнивание бумаги и т.д.), Но все проверенные браузеры и принтеры помещают элементы в точно в правильные точки относительно друг друга. Я ценю советы PDF, но кто-нибудь знает о дополнительных "gotchas" об использовании абсолютного позиционирования таким образом?
Update:
Для записи я переписал часть печати этикеток с помощью iTextSharp, и она отлично работает - определенно способ сделать это в будущем...
Ответы
Ответ 1
Забудьте HTML и сделайте PDF. HTML-печать чрезвычайно изменчива - не только в браузерах, но и в разных версиях одного и того же браузера. PDF намного проще.
Даже если вы получите это точно с помощью настройки браузера/шрифта/принтера/фазы луны, это будет самая хрупкая вещь, которую вы когда-либо должны были поддерживать. Независимо от того, как долго вы думаете, что потребуется, чтобы сделать PDF (и это не так уж сложно, как там есть некоторые бесплатные библиотеки), HTML в конечном итоге займет гораздо больше времени. Читатели PDF широко развернуты и печатают более последовательно, чем даже файлы Word.
Ответ 2
Веб-интерфейс не является форматом, гарантирующим получение согласованных результатов печати. Учитывая стандартную поддержку печати этикеток с помощью MS Word и относительную простоту автоматизации и генерации, я настоятельно рекомендую идти по этому маршруту.
Я не знаю никого метода, чтобы получать печать на всех типах браузеров, операционных систем и принтеров при использовании веб-контента.
Ответ 3
"точно" и "печать" - это не два слова, которые действительно хорошо работают вместе. Я сделал приложение OCR/OMR год назад, и даже при создании PDF я видел значительные различия между разными драйверами печати и т.д. Из-за этого моя кишка должна сказать вам, что у вас может не быть успеха на 100%.
Если проблемы с CSS и макетами не так хорошо работают для вас, возможно, вам придется прибегнуть к созданию меток в качестве изображений с использованием GDI + - по крайней мере, таким образом вы можете использовать GetFontMetrics() и т.д.
Удачи!
Ответ 4
У меня была аналогичная проблема, и ответ заключается в том, что вы не можете этого сделать. Вместо этого я сгенерировал PDF файл в реальном времени с помощью iTextSharp и передал его в ответ.
Ответ 5
Используя службы отчетов SQL Server, я создаю PDF файл для отправки на принтер, но его можно увидеть как HTML на экране, используя элемент управления, который вы можете включить в свои веб-страницы. Существуют файлы RDLC, доступные в Интернете для печати в различных форматах Avery.
Ответ 6
Я переписал код SharpPDFLabel, который был упомянут еще в 2011 году на этой неделе, поскольку мне было нужно, чтобы он был намного более гибким (и для работы с текущей библиотекой iTextSharp).
Вы можете получить его здесь:
https://github.com/finalcut/SharpPDFLabel
Я добавил возможность указать содержимое каждой отдельной метки, если вы хотите (или продолжать создавать листы одинаковых ярлыков тоже). Расширяя класс LabelDefinition
, вы можете легко определить расположение своих ярлыков.
Ответ 7
Я также боролся с подходом HTML/CSS из-за несогласованного поведения печати в браузерах.
Я создал библиотеку С# для создания ярлыков Avery из ASP.NET, которые, надеюсь, могут оказаться полезными:
https://github.com/wheelibin/SharpPDFLabel#readme
Вы можете добавлять изображения и текст к меткам, а также легко определять больше типов меток.
(Я использую его для ярлыков штрих-кода, штрих-код генерируется как изображение, а затем добавляется к метке с использованием этой библиотеки.)
Приветствия
Ответ 8
Добавьте несколько вариантов своего приложения, которые позволяют пользователям настраивать интервал для их конкретной конфигурации. Вы можете включить это право на ярлыке, если хотите, и отформатировать его с помощью селекторов мультимедиа, но вы, вероятно, захотите также их перенести.
Ответ 9
Flash также является хорошим способом подталкивания к печати, например, ярлыком, хотя и немного сложнее реализовать и поддерживать. В большинстве случаев он отображается намного быстрее, чем PDF, и вы можете вставлять его в дизайн страницы и просто добавлять кнопку "Печать" во флэш-памяти.
Я сделал это несколько лет назад, когда мы использовали HTML и PDF для получения подтверждающих квитанций. HTML "хорошо", но находится во власти веб-браузера конечных пользователей, поэтому мы быстро сбрасываем этот метод. PDF хороши, пока у них есть программа для чтения PDF, что, к нашему удивлению, у многих наших клиентов этого не произошло. Таким образом, это было сбрасыто также после того, как мы перешли на FLASH-версию, используя простой флеш-ролик, который включал несколько динамических текстовых областей и кнопку "Печать". Я передал данные между страницей и вспышкой, используя несколько флеш-варов. Вы также можете использовать веб-службу.
Когда мне нужно что-то большее, чем просто простой текст, я использую бесплатную версию сообщества компонента PDF Generator из DynamicPDF.com. Он отлично работает и очень быстро.
Ответ 10
Я просто пережил то же самое. Закончилось переключение и создание небольшого JSF-приложения (работающего на Glassfish), которое использует JasperReports для печати непосредственно на принтере-макете. Нажатие кнопки, мгновенная метка на принтере, даже не нужно просматривать ее на экране, если вы не хотите, поскольку Jasper может напрямую выводить на принтер (а также PDF в браузере).