我正在开发一个需要静默打印的Web应用程序-无需用户参与。 做到这一点的最佳方法是什么? 它不喜欢完全使用Javascript,Flash和/或AIR可以完成。 我见过的最接近的是Java小程序。
我能理解为什么对于任何网站而言,这样做都是一个坏主意。 此特定实例用于内部应用程序,并且如果用户需要将URL添加到受信任的站点列表,安装插件等,则完全可以接受。
您需要执行以下操作来立即启用Firefox,而不显示"打印首选项"对话框。
在Firefox的位置栏中输入about:config,然后按Enter。
右键单击页面上的任意位置,然后选择"新建">"布尔值"
输入首选项名称作为print.always_print_silent,然后单击
我发现在某个地方,这对我有帮助
正如@Axel所写,Firefox具有print.always_print_silent选项。
对于Chrome,请使用--kiosk-printing选项跳过"打印预览"对话框:
编辑用于启动Chrome的快捷方式,然后添加" --kiosk-printing",然后重新启动Chrome。
注意:如果它不起作用,很可能是因为您没有完全停止Chrome,因此注销并重新登录肯定可以解决问题。
您可以尝试以下两个代码示例:
1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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 ="";
}
}
<object ID="WebBrowser1" WIDTH="0" HEIGHT="0"
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object> |
2:
1 2 3 4 5 6 7 8 9
| 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();
} |
您可能需要将要测试的站点/页面添加到本地Intranet区域。
我们遇到了类似的问题。我们需要将支票打印到支票打印机,将标签打印到标签打印机,并将客户发票打印到零售商店embrasse-moi的发票打印机。我们有没有打印功能的虚拟计算机,角落,ipad,iphone。发票功能的打印基本上是无声打印。将pdf写入服务器,并在本地使用shell脚本检索并打印。
我们使用以下内容以最少的库来提供完美的解决方案:
在PHP中使用TCPDF创建PDF。将PDF存储在服务器上。将其放在"打印队列"文件夹中。 TCPDF的荣誉,有点难学,但是很讨厌。请注意,我们使用平均精度为5167的条形码每页打印80个标签。我们有标签,支票和发票打印队列。基本上,不同的文件夹适用于不同的打印机。
使用附带的外壳程序脚本通过FTP连接到服务器,下载PDF,从服务器上删除PDF,将PDF发送到打印机,然后再次删除PDF。
使用连接到打印机的本地计算机,在终端中运行脚本。显然会修改您的打印机和路径。
因为您始终希望运行此命令,并且因为使用了MAC,所以请使用automator创建一个" app"。启动自动化程序,将脚本放入"运行shell脚本"并保存。然后将该应用程序放在登录项中。如果要查看MAC上的"输出"窗口,请参阅shell脚本下面的脚本。
BAM-病了。
这是shell脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #!/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 |
和自动脚本,如果您想查看输出,请使用脚本保留应用程序
选择一个运行苹果脚本选项:
1 2 3 4 5 6 7 8 9 10 11
| 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 |
我知道这是一个较旧的主题,但它仍然是Google上"无声打印"的热门搜索,因此,我将添加自己的发现,以帮助任何遇到此问题的人。
在将各种类型的标签打印到用于库存系统的各种打印机上时,我们也遇到了类似的问题。这需要经过反复试验,但我们通过让系统创建标签pdf来解决,并在pdf中编码了打印机名称和页面数量。然后,您要做的就是:
在IE中,转到Internet选项>>安全性>>受信任的站点>>站点
清除"需要对该区域中的所有站点进行服务器验证(https :)"
添加" http:// [您的网址]"
pdf会自动打印出来。
最初设置时,我们使用的是Chrome作为默认浏览器,但在2015年9月,Chrome放弃了运行NPAPI插件的功能。这意味着您不能再选择Adobe pdf插件作为默认的pdf处理程序,并且内置的pdf插件不能处理无声打印:-(
它仍然可以在Internet Explorer(在撰写本文时为IE11)中工作,但是我没有尝试过任何其他浏览器。
高温超导
干杯,
尼格
我可以使用一个简单的JSP页面和Java PDF Renderer库(https://pdf-renderer.dev.java.net)全天候工作。这是可行的,因为Java使用OS而不是浏览器进行打印。据说"静默打印"被认为是浏览器漏洞/漏洞,并且在IE 6之后进行了修补,非常好运,它可以通过Javascript或Active X来工作。也许有可能,但是没有Java我就无法使其工作。
我写了一个python tsr,它每隔一段时间轮询一次服务器(它将轮询频率从服务器中拉出),然后将其打印到标签打印机上。比较好。
一旦用python编写,我就在上面使用py2exe,然后使用inno setup编译器,然后放在Intranet上并让用户安装它。
效果不是很好,但是效果很好。用户将在早晨启动它,该程序将在晚上从服务器收到终止开关。
您应该看看PrintNode。它们为Web应用程序提供了无提示的远程打印服务。您在桌面上安装了一个软件,该软件可以同步到其服务器。然后,您可以使用json请求发送printjobs,它们会立即打印出来。
我在同一问题上,这是到目前为止我学到的。
答:您需要设置一个IPP PrintServer
您可以尝试多种打印服务器实现。
硬件IPP打印服务器:像DLINK DPR-1020或类似产品,某些打印机内置了此功能。
具有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服务器的客户端,以便您选择将每个用户的打印请求发送到PrintServer进行处理。
PHP :: PRINT :: IPP是您可以尝试使用的php lib(在cups服务器上经过了很好的测试)。
如果只是内部应用程序,则可以避免从浏览器进行打印,而直接将打印输出从服务器发送到距离用户最近的打印机。
我必须说老实话,我在这里大声思考。.但是,这不能通过具有受信任权限(例如Intranet区域内的权限)的applet或某种类型(无论是Java还是其他)来完成?
可能值得研究可以赋予每个区域哪些权限?
继Google之后,我想您一定会遇到挑战,到目前为止,我所见的大多数文章都涉及到与服务器连接的打印机进行打印。
如果是内部打印机,是否可以将打印从服务器路由到部门/用户打印机或其他设备?