"Тихая" печать в веб-приложении
Я работаю над веб-приложением, которое нужно печатать беззвучно - это без участия пользователя. Какой лучший способ это сделать? Не нравится, что это можно сделать с помощью Javascript, Flash и/или AIR. Самое близкое, что я видел, - это апплет Java.
Я могу понять, почему именно Bad Idea для любого веб-сайта сможет это сделать. Этот конкретный экземпляр предназначен для внутреннего приложения, и это совершенно приемлемо, если пользователю необходимо добавить URL-адрес в список надежных сайтов, установить аддон и т.д.
Ответы
Ответ 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-запроса, и они будут немедленно распечатаны.