Я работаю над веб-приложением ASP.Net, которое должно печатать динамически созданные этикетки на стандартных листах этикеток в стиле Avery (один конкретный размер, поэтому только один общий макет). Этикетки имеют переменное количество строк (3-6) и могут содержать либо строки текста, либо графическое изображение штрих-кода.
В нашей первой версии, которую я унаследовал, использовались моноширинные шрифты, чтобы уменьшить проблемы с форматированием, но это не позволяло разместить достаточное количество текста на этикетках, и заказчик был недоволен. В основном это был форматированный текст.
Моя следующая версия использовала ТАБЛИЦЫ, DIV, CSS и немного вычислений JavaScript для форматирования меток с использованием пропорциональных шрифтов. Это все еще требовало небольшой настройки (пользователь должен был правильно установить поля печати и отключить печать верхних и нижних колонтитулов), но, похоже, это сработало.
Тем не менее, похоже, что существуют некоторые различия в том, как разные принтеры отображают текст (WYS - это не WYG), поэтому, хотя мы тестировали в разных браузерах, используя как минимум два разных принтера (струйный и лазерный), этикетки некоторых пользователей не выстраивайтесь в очередь. Небольшие вариации полей можно отрегулировать, отрегулировав поля в диалоговом окне настройки страницы, но более сложная проблема заключается в том, что расстояние между этикетками может быть отклонено на крошечную долю дюйма, так что если первая этикетка довольно хорошо отцентрирована, В конце страницы текст ярлыка и изображения соскочили с верха или низа ярлыков.
Мы близки к тому, чтобы переключиться на создание вывода Word, Excel или PDF, что потребует довольно много времени на разработку и, возможно, добавит дополнительные шаги в процессе печати.
Итак, есть ли у кого-нибудь предложения о том, как создать макет HTML / CSS, который будет точно отображаться на разных типах принтеров? Мне все равно, если разрывы строк / слов немного отличаются, но мне нужно иметь возможность предсказуемо позиционировать верхние левые углы каждой области метки.
Прямо сейчас метки спускаются вниз по странице в таблице, и мы настроили блочную модель ячеек и внутренних DIV, чтобы сделать их одинаковой высоты. Я подозреваю, что использование абсолютного позиционирования каждого элемента может быть лучшим ответом, но это также будет сложно из-за генерации ASP.Net элементов метки. Если бы я знал наверняка, что это сработает, я бы предпочел попробовать, чем выбросить все, что нам нужно, чтобы перейти к другому методу генерации.
Незначительное обновление: Прямо сейчас я провожу несколько тестов с абсолютным позиционированием - устанавливаю только верхнюю и левую координаты содержащего элемента блока. Пока есть незначительные вариации смещения на странице (поля, выравнивание бумаги и т. д.), Но все протестированные браузеры и принтеры помещают элементы в точно в правильные места относительно друг друга. Я ценю советы в формате PDF, но знает ли кто-нибудь о дополнительных подводных камнях при таком использовании абсолютного позиционирования?
Обновлять: Для справки, я переписал часть печати этикеток с помощью iTextSharp, и она отлично работает - определенно способ сделать это в будущем ...





Забудьте HTML и сделайте PDF. Печать HTML чрезвычайно разнообразна - не только в разных браузерах, но и в разных версиях одного и того же браузера. PDF намного проще.
Даже если вы сделаете это правильно с одним браузером / настройкой шрифта / принтером / фазой луны, это будет самая хрупкая вещь, которую вам когда-либо приходилось поддерживать. Независимо от того, сколько времени, по вашему мнению, займет создание PDF-файла (а это не так уж сложно, поскольку есть несколько бесплатных библиотек), HTML в конечном итоге займет у вас гораздо больше времени. Программы чтения PDF широко распространены и печатают более стабильно, чем файлы Word.
PDF был бы сложнее и менее гибким, чем документ Word, не так ли?
PDF менее гибкий, чем файл Word, поскольку вы не можете (легко) отредактировать файл PDF. Я не думаю, что здесь это нужно учитывать. PDF определенно легче создать, чем файл Word. В этой статье в Википедии перечислены некоторые способы сделать это: en.wikipedia.org/wiki/List_of_PDF_software
Интернет - это не тот формат, который гарантирует стабильные результаты печати. Учитывая стандартную поддержку печати этикеток с помощью MS Word и относительную простоту автоматизации и генерации, я настоятельно рекомендую пойти по этому пути.
Я не знаю НИКАКОГО метода точной печати во всех типах браузеров, операционных систем и принтеров при использовании веб-контента.
Вы можете быть ПРЯМО СЕЙЧАС, но следующее обновление FireFox, следующее обновление IE, и вы вернетесь к исходной точке.
Добавьте в свое приложение несколько параметров, которые позволят пользователям настраивать интервал для своей конкретной конфигурации. Вы можете включить это прямо на этикетку, если хотите, и стилизовать его с помощью селекторов мультимедиа, но вы, вероятно, тоже захотите сохранить их где-нибудь.
Мы не можем заставить их установить свои поля и повернуть свои верхние и нижние колонтитулы надежно, а инструкции для этого отображаются прямо на веб-странице этикетки (и скрыты селекторами мультимедиа при печати), поэтому просим их внести микро-корректировки в расстояние между этикетками нам не подходит.
«точно» и «печать» - не два слова, которые действительно так хорошо сочетаются друг с другом. Я сделал приложение OCR / OMR год назад или около того, и даже при создании PDF-файла я увидел значительные различия между различными драйверами печати и тому подобным. Из-за этого я интуитивно говорю вам, что у вас может не быть 100% успеха.
Если проблемы с CSS и макетом не подходят для вас, возможно, вам придется прибегнуть к созданию меток в виде изображений с помощью GDI + - по крайней мере, таким образом вы можете использовать GetFontMetrics () и тому подобное.
Удачи!
У меня была аналогичная проблема, и ответ - вы не можете этого сделать. Вместо этого я сгенерировал PDF-файл в реальном времени с помощью iTextSharp и передал его в ответ.
Flash также является хорошим способом продвинуть печатный объект как этикетку, хотя его немного сложнее реализовать и поддерживать. В большинстве случаев он отображается намного быстрее, чем PDF-файл, и вы можете встроить его в дизайн страницы и просто добавить кнопку «Печать» во флэш-память.
Я сделал это несколько лет назад, когда мы использовали HTML и PDF для генерации квитанций с подтверждением. HTML - это нормально, но он находится во власти веб-браузера конечных пользователей, поэтому мы быстро отказались от этого метода. PDF-файлы хороши, если у них есть программа для чтения PDF-файлов, чего, к нашему удивлению, не было у многих наших клиентов. Так что это тоже было сброшено после того, как мы перешли на версию FLASH, используя простой флэш-ролик, который включал несколько динамических текстовых областей и кнопку «печать». Я передал данные между страницей и флэш-памятью с помощью нескольких флэш-варов. Вы также можете использовать веб-сервис.
Когда мне нужно что-то большее, чем простой текст, я использую бесплатную версию компонента PDF Generator от DynamicPDF.com. Он отлично работает и работает очень быстро.
Используя службы отчетов SQL Server, я создаю PDF-файл для отправки на принтер, но его можно увидеть на экране как HTML с помощью элемента управления, который вы можете включить в свои веб-страницы. В Интернете есть файлы RDLC, которые можно распечатать в различных форматах Avery.
Я также боролся с подходом HTML / CSS из-за непоследовательного поведения печати в браузерах.
Я создал библиотеку C# для создания ярлыков Avery из ASP.NET, которые, надеюсь, вы найдете полезными:
https://github.com/wheelibin/SharpPDFLabel#readme
Вы можете добавлять изображения и текст к этикеткам, а также легко определять другие типы этикеток.
(Я использую его для этикеток со штрих-кодом, штрих-код создается как изображение, а затем добавляется к этикетке с помощью этой библиотеки.)
Ваше здоровье
Я голосую против этого только потому, что код устарел. Я действительно использовал ваш проект в качестве основы для своего ответа, поэтому мне неудобно / неловко из-за того, что я проголосовал против вас.
ха-ха, не беспокойтесь об этом - рад, что это было кому-то полезно (было бы неплохо, если бы вы внесли свой вклад в оригинал, чтобы сделать его лучше, а не просто разветвляли его, но эй-хо)
Я предположил, что кажется неправильным, что вы на самом деле не поддерживали старый проект, поэтому я не хотел вас об этом беспокоить. Я отправил вам запрос на перенос.
Я только что прошел через то же самое. Завершено переключение и создание небольшого JSF-приложения (работающего на Glassfish), которое использует JasperReports для печати непосредственно на этикеточном принтере. Нажатие кнопки, мгновенная этикетка на принтере, даже не нужно просматривать ее на экране, если вы этого не хотите, поскольку Джаспер может напрямую выводить на принтер (а также PDF-файл в браузере).
Я переписал код SharpPDFLabel, который упоминался еще в 2011 году на этой неделе, поскольку мне нужно было сделать его более гибким (и для работы с текущей библиотекой iTextSharp).
Вы можете получить его здесь: https://github.com/finalcut/SharpPDFLabel
Я добавил возможность указывать содержимое каждой отдельной метки, если вы хотите (или продолжить создание листа идентичных этикеток). Расширяя класс LabelDefinition, вы можете довольно легко указать макет ваших этикеток.
с головы до ног, я не уверен, что сожалею. Я мало использовал эту библиотеку с тех пор, как сделал обновление. Мне не нужно было добавлять штрих-коды ни к одному из своих; Просто имена и адреса (почтовые ярлыки). Я предполагаю, что это изображение (штрих-код), может быть, что-то вроде: cs singleSheetLabelCreator.AddImage(myImageAsAStream);
Я должен согласиться. Недавно у нас была аналогичная проблема, и создание PDF-файлов было самым быстрым и простым решением. Мы даже дошли до того, что предоставили страницу калибровки для калибровки этикеток и печати для различных принтеров.