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

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

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

22.08.2008 06:59:56
Какое решение сработало для вас?
noamtm 31.10.2011 07:28:40
В итоге мы использовали апплет Java. Это был кошмар. Обычно это было бы ужасно, но, поскольку это было на Олимпийских играх 2008 года в Пекине, дополнительные различия в дистанции и языке сделали его кошмаром. В конце концов, это сработало «достаточно». Но опять кошмар. Я бы не рекомендовал это.
Bill 19.02.2012 06:08:48
Если вы наткнулись здесь только на то, что маршрут Java-апплета больше не работает, вот хорошее обсуждение этого вопроса: stackoverflow.com/questions/27057816
tresf 30.03.2016 14:32:31
мне нужно, когда открывается PDF в браузере печатает автоматически любые идеи
shareef 21.11.2016 09:34:19
11 ОТВЕТОВ

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

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

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

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

0
22.08.2008 07:08:05

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

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

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

1
22.08.2008 07:12:30

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

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();
} 

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

6
22.08.2008 07:31:41

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

0
22.08.2008 09:35:19
Нет, это внутреннее приложение в том смысле, что оно доступно для широкой публики, но оно будет в таких местах, как различные розничные сети и т. Д.
Bill 23.10.2008 05:35:20

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

  1. Введите about: config в адресную строку Firefox и нажмите Enter.

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

  3. Введите имя предпочтения как print.always_print_silent и нажмите ОК.


Я нашел это где-то, и это помогло мне

32
25.03.2009 16:56:49
Это работает! Спасибо. Кто-нибудь знает, если вы можете сделать это, это любой другой браузер тоже?
aron 2.05.2012 20:51:35
Спасибо! Спасло меня часы разочарования!
patrickdamery 21.01.2014 22:04:27
А как насчет IE и хрома?
user3830198 1.04.2015 10:33:43
В моем браузере Firefox теперь не отображается диалоговое окно «Печать». Огромное спасибо. Тем не менее, он показывает мне, чтобы ввести «Имя файла» в диалоговом окне Сохранить как. Есть идеи, как это исправить? :)
Simant 16.10.2019 15:32:07
Как этого добиться в браузере Microsoft Edge?
Simant 17.10.2019 15:24:32

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

1
18.11.2010 23:12:02

Я нахожусь здесь по той же проблеме, это то, чему я учусь до сих пор.

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

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

  1. Аппаратный сервер печати IPP: например, DLINK DPR-1020 или аналогичный, некоторые принтеры имеют эту встроенную функцию.

  2. Сервер Linux с CUPPS: http://www.howtoforge.com/ipp_based_print_server_cups

  3. Сервер XP-Pro с ISS: http://www.michaelphipps.com/ipp-print-server-windows-xp-solution

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

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

0
17.02.2012 20:42:53

Мы боролись с подобной проблемой. Нам нужно было распечатать чеки на принтере чеков, этикетки на принтере этикеток и счета клиентов на принтере счетов для магазина розничной торговли embrasse-moi . У нас есть фиктивные компьютеры, уголки, iPad, iPhone без возможности печати. Функция печати счета-фактуры была в основном тихой печатью. На сервер был записан файл PDF, а для его извлечения и печати использовался сценарий оболочки.

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

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

  2. Используйте прилагаемый сценарий оболочки для подключения к серверу по FTP, загрузите PDF, удалите PDF с сервера, отправьте PDF на принтер и снова удалите PDF.

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

  4. Поскольку вы всегда хотите, чтобы это работало, и потому что вы используете MAC, создайте «приложение» с помощью automator. Запустите automator, поместите скрипт в «скрипт запуска оболочки» и сохраните. Затем вставьте это приложение в элемент входа. Посмотрите скрипт под скриптом оболочки, если вы хотите увидеть окно «output» на MAC.

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

Вот сценарий оболочки

#!/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's 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

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

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
5
28.04.2014 13:30:40

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

0
27.10.2014 22:47:28

Как писал @Axel, в Firefox есть опция print.always_print_silent.

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

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

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

7
19.04.2016 10:51:11
Вы должны убедиться, что все процессы Chrome убиты (видеовстречи и т. д.). Это всегда приводило меня в замешательство, когда я не мог понять, почему мои флаги запуска не распознаются. --disable-print-previewэто еще один способ обойти окно предварительного просмотра Chrome и получить параметры диалогового окна системной печати по умолчанию.
timbrown 21.05.2015 22:09:07
Предлагает ли developer.chrome.com/extensions/printerProvider решение для автоматической печати в chrome?
mmu36478 18.04.2017 13:46:24
чтобы перезапустить Chrome, вставьте chrome://restartстроку URL и нажмите enter
Miguel Pynto 2.12.2018 23:41:38

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

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

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

HTH Приветствия, Nige

3
2.08.2016 08:49:56