Web应用程序中的“无声”打印
我正在开发一个需要静默打印的Web应用程序 – 这是没有用户参与的。 什么是完成这个最好的方法? 它不喜欢它可以严格使用Javascript,也不是Flash和/或AIR。 我见过的最接近的Java applet。
我可以理解为什么只有任何一个网站能够做到这一点,这是一个坏主意。 这个特定的实例用于内部应用程序,如果用户需要将URL添加到受信任的站点列表,安装插件等,这是完全可以接受的。
以下是您需要做的,以便在不显示打印首选项对话框的情况下立即打印Firefox。
-
在Firefox的地址栏inputabout:config,然后按Enter键。
-
在页面的任何地方右键单击并selectNew> Boolean
-
input首选项名称为print.always_print_silent,然后单击确定。
我发现在某个地方,它帮助了我
以下是您可以尝试的两个代码示例:
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(); }
您可能需要将您正在testing的网站/页面添加到本地Intranet区域。
我们也遇到了类似的问题。 我们需要打印支票到支票打印机,标签到标签打印机和客户发票到零售店embrasse-moi的发票打印机。 我们有虚拟电脑,angular落,ipad公司,没有打印function的iphones。 打印发票function基本上是一个沉默的打印。 一个pdf被写到服务器上,一个shell脚本被用于本地检索并打印。
我们用最less的库来完美解决以下问题:
-
在PHP中使用TCPDF来创buildPDF。 将PDF存储在服务器上。 把它放在“打印队列”文件夹中。 TCPDF的荣誉,有点难学,但是SICK SICK SICK。 请注意,我们使用具有完美精度的条形码的avery 5167在每页打印80个标签。 我们有一个标签,检查和发票打印队列。 不同的文件夹基本上为不同的打印
-
使用附带的shell脚本通过FTP连接到服务器,下载PDF,从服务器上删除PDF,将PDF发送到打印机,再次删除PDF。
-
使用连接到打印机的本地计算机,在terminal中运行脚本。 显然修改您的打印机和path。
-
因为你总是想要这个运行,并且因为你使用了MAC,所以使用automator创build一个“应用程序”。 启动automator,将脚本放在“运行shell脚本”中并保存。 然后将该应用程序粘贴到login项目中。 如果你想在MAC上看到“输出”窗口,请参阅shell脚本下面的脚本。
BAM – 生病。
这是shell脚本
#!/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
和自动化脚本,如果你想看到输出,保持与脚本的应用程序select一个运行苹果脚本选项:
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
正如@Axel写的,Firefox有print.always_print_silent选项。
对于Chrome,请使用--kiosk-printing
选项跳过“打印预览”对话框:
编辑用于启动Chrome的快捷方式,并添加“–kiosk-printing”,然后重新启动Chrome。
注意:如果它不起作用,很可能是因为你没有完全停止Chrome浏览器,注销并返回将肯定会伎俩。
我写了一个python tsr,每隔一段时间就轮询一次服务器(从服务器上取消轮询频率),然后打印出标签打印机。 相对不错。
一旦用python编写,我使用了py2exe,然后inno安装编译器,然后把它放在intranet上,让用户安装它。
这不是很好,但它的工作。 用户将在早上启动它,程序将在晚上从服务器接收到kill命令。
我使用一个简单的JSP页面和Java PDF Renderer库(https://pdf-renderer.dev.java.net)整天工作。; 这是有效的,因为Java使用操作系统而不是浏览器进行打印。 假设“无声打印”被认为是浏览器漏洞/漏洞利用,并在IE 6之后进行了修补,所以运气好的话可以通过Javascript或Active X进行工作。也许有可能,但是如果没有Java,我是无法实现的。
我知道这是一个较老的post,但它仍然是谷歌search“静音印刷”的最佳select,所以我会添加我的发现,以利于现在任何人的发现。
我们有一个类似的问题,打印各种打印机的库存系统的各种types的标签。 这需要一些试验和错误,但是我们通过让系统创build标签的pdf来解决这个问题,打印机名称和页面数量以PDF格式编码。 所有你需要做的是:在IE浏览器,进入Internet选项>>安全>>可信站点>>站点清除“要求服务器validation(https :)为所有站点在此区域添加” http:// [yoururl] “和pdf将自动打印出来。
当我们最初设置这个时,我们使用Chrome作为默认浏览器,但在2015年9月,Chrome降低了运行NPAPI插件的能力。 这意味着你不能再selectAdobe PDF插件作为默认的PDF处理程序,而内置的pdf插件不能处理无声打印:-(它仍然可以在IE浏览器中工作(写作时IE11),但我已经没有尝试任何其他浏览器。
HTH干杯,尼日
我必须诚实地说,我有点在这里大声思考。但是不能用一个小程序或某种types的东西(不pipe是Java还是其他)给予可信任的权限(比如在Intranet区域内) ?
可能值得调查什么权限可以给每个区域?
继谷歌之后,我认为你肯定有一个挑战,到目前为止,我所看到的大多数文章都涉及打印到连接到服务器的打印机 。
如果它的内部,是否有可能从服务器路由打印部门/用户打印机或什么的?
如果它只是一个内部应用程序,那么您可以避免从浏览器打印,并直接从服务器发送打印输出到最近的打印机给用户。
我在这里同样的问题,这是我迄今为止学习。
答:您需要设置IPP打印服务器
您可以尝试多个打印服务器实现。
-
硬件IPP打印服务器:像DLINK DPR-1020或类似的打印机,某些打印机具有此function。
-
带有CUPPS的Linux服务器: http : //www.howtoforge.com/ipp_based_print_server_cups
-
带有ISS的XP-Pro服务器: http : //www.michaelphipps.com/ipp-print-server-windows-xp-solution
B .:您需要将WebApp设置为该IPP服务器的客户端,以便将每个用户的打印请求发送到打印服务器。
PHP :: PRINT :: IPP是一个PHP库,你可以尝试(它在杯子服务器上进行了很好的testing)。
你应该看看PrintNode 。 他们为Web应用程序提供无提示的远程打印服务。 在桌面上安装一个与其服务器同步的软件。 然后,您可以使用json请求发送打印作业,并立即打印出来。