Подтвердить что ты не робот

"Тихая" печать в веб-приложении

Я работаю над веб-приложением, которое нужно печатать беззвучно - это без участия пользователя. Какой лучший способ это сделать? Не нравится, что это можно сделать с помощью Javascript, Flash и/или AIR. Самое близкое, что я видел, - это апплет Java.

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

4b9b3361

Ответ 1

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

  • Введите примерно: config в строке местоположения Firefox и нажмите Enter.

  • Щелкните правой кнопкой мыши в любом месте страницы и выберите "Создать" > "Логическое"

  • Введите имя предпочтения в качестве print.always_print_silent и нажмите OK.


Я обнаружил, что где-то это помогло мне

Ответ 2

Вот два примера кода, которые вы можете попробовать:

1:

<script>
function Print() {
  alert ("THUD.. another tree bites the dust!")
  if (document.layers)
  {
    window.print();
  }
  else if (document.all)
  {
    WebBrowser1.ExecWB(6, 1);
    //use 6, 1 to prompt the print dialog or 6, 6 to omit it
    //some websites also indicate that 6,2 should be used to omit the box
    WebBrowser1.outerHTML = "";
  }
}
</script>
<object ID="WebBrowser1" WIDTH="0" HEIGHT="0"
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object>

2:

if (navigator.appName == "Microsoft Internet Explorer")
{ 
  var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
  document.body.insertAdjacentHTML('beforeEnd', PrintCommand); 
  PrintCommandObject.ExecWB(6, -1); PrintCommandObject.outerHTML = ""; 
} 
else { 
  window.print();
} 

Вам может потребоваться добавить сайт/страницу, которую вы тестируете, в локальную зону интрасети.

Ответ 3

Мы боролись с подобной проблемой. Нам нужно было распечатать чеки на контрольном принтере, наклейки на принтер для этикеток и счета-фактуры клиентов на принтер-фактуру для розничного магазина embrasse-moi. У нас есть фиктивные компьютеры, уголки, ipads, iphones без возможностей печати. Печать функции счета-фактуры была в основном тихой печатью. На сервер был написан pdf файл, а оболочка script была использована локально для извлечения и печати. ​​

Мы использовали следующее для идеального решения с минимальными библиотеками:

  • использовать TCPDF в PHP для создания PDF. Храните PDF файл на сервере. Поместите его в папку "Очередь печати". Престижность для TCPDF, немного сложно изучить, но SICK SICK SICK. Обратите внимание, что мы печатаем 80 меток на странице, используя avery 5167 с штрих-кодом с полной точностью. У нас есть очередь печати, проверки и очереди счетов. Различные папки в основном для разных принтеров.

  • Используйте подключенную оболочку script для подключения к серверу через FTP, загружайте PDF файл, удаляйте PDF файл с сервера, отправляйте PDF-документ на принтер и снова удаляйте PDF файл.

  • Используя локальный компьютер, подключенный к принтеру, запустите терминал script. очевидно, измените ваши принтеры и пути.

  • Поскольку вы всегда этого хотите, и потому, что вы используете MAC, создайте "приложение", используя автомат. Запустите автомат, поместите script в "run shell script" и сохраните. Затем вставьте это приложение в элемент входа. См. script под оболочкой script, если вы хотите увидеть окно вывода на MAC.

БАМ - работает больным.

Вот оболочка script

#!/bin/bash

# Get a remote directory Folder
# List the contents every second
# Copy the files to a local folder
# delete the file from server
# send the file to a printer
# delete the file
# compliments of embrasse-moi.com


clear               # clear terminal window

echo "##########################################"
echo "Embrasse-Moi Remote Print Queue Script"
echo "##########################################"

#Local Print Queue Directory
COPY_TO_DIRECTORY=/volumes/DATA/test/
echo "Local Directory: $COPY_TO_DIRECTORY"
#Priter
PRINTER='Brother_MFC_7820N'
echo "Printer Name: $PRINTER"

#FTP Info
USER="user"
PASS="pass"
HOST="ftp.yourserver.com"
#remote path
COPY_REMOTE_DIRECTORY_FILES=/path
echo "Remote Print Queue Directory: $HOST$COPY_REMOTE_DIRECTORY_FILES"

echo 'Entering Repeating Loop'
while true;  do

    #make the copy to directory if not exist
    echo "Making Directory If it Does Not Exist"
    mkdir -p $COPY_TO_DIRECTORY
    cd $COPY_TO_DIRECTORY

    ######################### WGET ATTEMPTS ############################################
    #NOTE wget will need to be installed
    echo "NOT Using wget to retrieve remote files..."

    # wget --tries=45 -o log --ftp-user=$USER --ftp-password=$PASS ftp://ftp.yourserver.com$COPY_REMOTE_DIRECTORY_FILES/*.pdf

    ######################### FTP ATTEMPTS ############################################
    echo "NOT Using ftp to retrieve and delete remote files..."
    #This seems to fail at mget, plus not sure how to delete file or loop through files
    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASS
    cd $COPY_REMOTE_DIRECTORY_FILES
    ls
    prompt
    mget *
    mdel *
END_SCRIPT


    echo "Examining Files in $COPY_TO_DIRECTORY"
    for f in $COPY_TO_DIRECTORY/*.pdf
    do
      # take action on each file. $f store current file name      
      #print
      echo "Printing File: $f To: $PRINTER"
      lpr -P $PRINTER $f

      # This will remove the file.....
      echo "Deleting File: $f"
      rm "$f"
    done
    echo "Script Complete... now repeat until killed..."
    sleep 5
done

и автомат script, если вы хотите увидеть вывод, сохраните приложение с помощью script выберите вариант запуска apple script:

on run {input, parameters}

    tell application "Finder" to get folder of (path to me) as Unicode text
    set workingDir to POSIX path of result
    tell application "Terminal"
            do script "sh " & "'" & workingDir & "script1.sh" & "'"

    end tell

    return input
end run

Ответ 4

Как пишет @Axel, Firefox имеет параметр print.always_print_silent.

Для Chrome используйте параметр --kiosk-printing, чтобы пропустить диалог предварительного просмотра:

Отредактируйте ярлык, который вы используете для запуска Chrome, и добавьте "--kiosk-printing", а затем перезапустите Chrome.

Примечание. Если это не сработает, скорее всего, потому что вы не полностью остановили Chrome, выйдите из системы и вернетесь, наверняка сделаете трюк.

Ответ 5

Я написал python tsr, который так часто опросил сервер (он вытащил свою частоту опроса с сервера) и распечатал на принтере метки. Было относительно приятно.

После написания на python я использовал py2exe на нем, затем установил компилятор inno, затем установил интрасеть и установил пользователь.

Это было не здорово, но это сработало. Пользователи запустили его утром, и программа получала бы переключатель kill с сервера в ночное время.

Ответ 6

Я работаю весь день, используя простую страницу JSP и библиотеку Java PDF Renderer (https://pdf-renderer.dev.java.net). Это работает, потому что Java печатает с использованием ОС, а не браузера. Предположительно "тихая печать" считается уязвимостью/эксплорером браузера и была исправлена ​​после IE 6, так что удача в том, чтобы заставить ее работать через Javascript или Active X. Возможно, это возможно, но я не мог заставить ее работать без Java.

Ответ 7

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

У нас была аналогичная проблема с печатными надписями различных типов для различных принтеров для системы запасов. Потребовались некоторые пробные версии и ошибки, но мы обошли его, создав систему для создания PDF-меток с именем принтера и количеством страниц, закодированным в pdf. Все, что вам нужно сделать, это: В IE перейдите в раздел "Свойства обозревателя" → Безопасность → Надежные сайты → Сайты Очистить 'Требуется проверка сервера (https:) для всех сайтов в этой зоне "add" http://[yoururl] " и PDF автоматически распечатает.

Когда мы изначально установили это, мы использовали Chrome в качестве браузера по умолчанию, но в сентябре 2015 года Chrome отказался от возможности запуска плагинов NPAPI. Это означало, что вы больше не можете выбирать плагин Adobe pdf в качестве обработчика PDF по умолчанию, а встроенный в pdf плагин не обрабатывает тихую печать:-( Он все еще работает в Internet Explorer (IE11 на момент написания), но я не пробовал никаких других браузеров.

НТН Ура, Nige

Ответ 8

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

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

Следуя Google, я думаю, что у вас определенно есть проблема, до сих пор большинство статей, которые я видел, включали печать на принтеры, подключенные к серверу.

Если его внутренняя, можно ли маршрутизировать печать с сервера на принтеры отделов/пользователей или что-то еще?

Ответ 9

Если это просто внутреннее приложение, вы можете избежать печати в браузере и отправить распечатку непосредственно с сервера на ближайший принтер пользователю.

Ответ 10

У меня такая же проблема, вот что я узнал до сих пор.

A: вам нужно настроить IPP PrintServer

У вас есть несколько реализаций сервера печати, которые вы можете попробовать.

B: вам нужно сделать ваш WebApp клиентом этого IPP-сервера, чтобы вы выбрали процесс - отправьте каждый запрос на печать на сервер PrintServer.

PHP:: PRINT:: IPP - это php lib, который вы можете попробовать (он хорошо протестирован на серверах чашек).

Ответ 11

Вы должны посмотреть PrintNode. Они предоставляют услуги бесшумной удаленной печати для веб-приложений. Вы устанавливаете часть программного обеспечения на рабочем столе, которое синхронизируется с их серверами. Затем вы можете отправить printjobs с помощью json-запроса, и они будут немедленно распечатаны.