Nano Hash - криптовалюты, майнинг, программирование

POS: получить веб-сайт для печати непосредственно на определенном локальном принтере.

У меня есть веб-сайт, на котором работает служба кассовых сборов, которая выдает билеты и отчеты. Я пытаюсь выяснить, как получить билеты (в настоящее время в формате PDF), отправленные непосредственно на указанный принтер на локальном/клиентском ПК.

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

Сценарий таков: Удаленный размещенный веб-сайт - подключен 1 или несколько пользователей - веб-страница генерирует билеты (PDF), которые автоматически отправляются на указанный принтер на пользовательском компьютере (не на принтер по умолчанию) (без дополнительных щелчков по приглашениям на печать) ).

Я знаю, что PHP не подключается к клиентскому компьютеру, но есть ли способ для веб-страницы (возможно, через jQuery) подключиться к установленному скрипту/сервису?

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

Любые указатели будут очень признательны.

Редактировать: я попробовал java-апплет jZebra, но только один раз распечатал его, прежде чем он сломался. Интересно, у кого-нибудь это действительно получилось (и как).

02.08.2013


Ответы:


1

Недавно я столкнулся с ТОЧНЫМ же вопросом. В Google Chrome есть так называемый режим «киоска». Поэтому он будет печатать без вмешательства пользователя.

Для этого откройте Google Chrome с помощью следующей команды (вам нужно найти исполняемый файл chrome или команду chrome для машин *nix):

chrome.exe "http://www.example.com/mypage.php" --kiosk --kiosk-printing

Это откроет окно без каких-либо панелей инструментов, адресных строк, омнибоксов и т. д.

Далее необходимо сделать печать страницы. Для этого автоматически откроется диалоговое окно печати (для демонстрации я буду использовать простой Javascript):

<script>
  window.print();
</script>

Прежде чем вы перейдете к среде разработки, window.print() НЕ не допускает никаких аргументов (например, URL).

Этот код открывает диалоговое окно печати. Однако в режиме киоска диалоговое окно печати будет пропущено, и страница будет автоматически распечатана на принтере по умолчанию.

Теперь вы упомянули PDF, и, скорее всего, вы генерируете его с помощью PHP (если вы печатаете выпущенные/сгенерированные файлы), вы, вероятно, думаете: «О, ну, я не могу поместить HTML в PDF для выполнения javascript». В этом нет необходимости! Вот как решить проблему с печатью правильной страницы:

Вставьте следующее на страницу HTML/PHP, на которую отправляется пользователь (для этого решения пользователю не нужно открывать файл .pdf), в <head> целевой страницы/страницы успеха:

<link rel="alternate" media="print" href="LINK TO PDF FILE">

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

Помните следующее:

  • В режиме киоска нет кнопки выхода. Чтобы выйти, нажмите ALT + F4.
  • При печати в режиме киоска вам нужны оба --kiosk И --kiosk-printing. Аргумент печати требует аргумента --kiosk.
  • При печати в режиме киоска нормально диалоговое окно печати появляется, а затем внезапно исчезает. Этого нельзя избежать без продвинутого многоуровневого окна и многого другого.

Я уверен, что другие браузеры имеют аналогичные функции для обхода диалогового окна печати, однако я обнаружил, что Google Chrome лучше всего работает с такими функциями. Если вы работаете на компьютере с Linux, у Google есть файл .deb, с помощью которого вы можете установить Google Chrome в Linux, используя команду sudo dpkg -i (package / downloaded .deb file path). Chromium --может-- поддерживает такую ​​функциональность. Насколько я знаю, должно.

Если вам нужна дополнительная помощь, оставьте свой вопрос в комментариях ниже, я отвечу как можно скорее.

Надеюсь, я помог. Если да, не стесняйтесь давать мне зеленый чек слева от вас. ;)

02.08.2013
  • Не буду врать, это один из самых информативных ответов на SO, которые я когда-либо видел. Я никогда даже не слышал о режиме киоска. 02.08.2013
  • @Pitchinnate Спасибо за комплимент. Я стараюсь помогать людям, когда могу, независимо от того, насколько информативны ответы. Глупых вопросов не бывает. Еще раз спасибо за конструктивный отзыв. :) 02.08.2013
  • Спасибо за очень информативный и интересный ответ, я никогда не знал, что в Chrome есть такая функция! :o) К сожалению для меня, у меня есть две проблемы: 1) поскольку windows.print не принимает никаких аргументов, его нельзя настроить для печати на определенном принтере (в моем случае принтер билетов). 2) Я часто изменяю размер браузера, чтобы иметь возможность одновременно читать электронные письма для заказов. Спасибо за понимание режима киоска! 02.08.2013
  • @lxsparks Спасибо за конструктивный отзыв! Я также включил в ответ выше способ выбора страницы для печати. Кстати, если мой ответ решил ваш вопрос, нажмите зеленую галочку слева от него. Он наградит меня репутацией (которая мне нужна, чтобы я мог в конечном итоге публиковать комментарии, чтобы получить больше информации, такой как версии и т. д.), и он пометит его как правильный ответ или предоставил больше всего информации. Спасибо! :) 02.08.2013
  • @NetworkNerd Хорошее решение. Я запускаю приложение, аналогичное OP, и вместо того, чтобы открывать дополнительные страницы, я загружаю PDF-файл в iframe и вместо этого вызываю функцию печати из режима киоска для этого iframe. Я столкнулся с проблемой, когда иногда он печатает пустую этикетку / квитанцию, поскольку pdf-файл не загружается к тому времени, когда проходит команда для печати. В качестве временной меры я использовал setTimeout для ожидания произвольного количества времени, но я хотел бы иметь возможность точно знать, когда PDF-файл будет доступен для печати. Решает ли ваше решение с тегом ‹link› эту проблему? 03.12.2014
  • @AustinK, я почти уверен, что ваш ответ является частью моего решения, но в моем случае у меня есть только одностраничный проект (сканер билетов, который проверяет штрих-код, возвращает pdf + qrcode+name+company). У меня есть сканирование и создание части PDF, но я не уверен, где я должен поставить <script> window.print(); </script> и <link rel="alternate" media="print" href="LINK TO PDF FILE">. Потому что при загрузке PDF-файл еще не создан, только после сканирования и возврата пользователя (с помощью ajax) создается PDF-файл. 14.01.2016
  • Кстати, теоретически следующее должно печатать test.pdf, верно? в моем случае это не <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="alternate" media="print" href="http://localhost/mydomain.com/test/test.pdf"> <script> window.print(); </script> </head> <body> <div>TODO write content</div> </body> </html> 14.01.2016
  • @alex Попробуйте переместить часть <script>window.print();</script> за пределы элемента <head>. Кроме того, какой браузер вы используете для проверки? 15.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..