我正在开发一个需要无需用户干预即可静默打印的Web应用程序。怎样才能最好地实现这一目标呢?严格使用JavaScript、Flash和/或AIR似乎都不行。我发现最接近的方法是使用Java applet。
我理解为什么任何网站随意执行此操作都是一个坏主意。但是,对于一个内部应用程序来说并不是问题。如果用户需要将该URL添加到信任站点列表、安装插件等,则完全可以接受。
我正在开发一个需要无需用户干预即可静默打印的Web应用程序。怎样才能最好地实现这一目标呢?严格使用JavaScript、Flash和/或AIR似乎都不行。我发现最接近的方法是使用Java applet。
我理解为什么任何网站随意执行此操作都是一个坏主意。但是,对于一个内部应用程序来说并不是问题。如果用户需要将该URL添加到信任站点列表、安装插件等,则完全可以接受。
以下是启用 Firefox 立即打印而不显示打印偏好设置对话框的步骤:
在 Firefox 的地址栏中键入 about:config 并按 Enter。
右键单击页面上的任何位置,然后选择“新建 > 布尔值”。
输入首选项名称 print.always_print_silent,然后单击“确定”。
我在某处找到了这个,它帮助了我
正如@Axel所写,Firefox有print.always_print_silent选项。
对于Chrome,使用--kiosk-printing
选项跳过打印预览对话框:
编辑您用于启动Chrome的快捷方式并添加“--kiosk-printing”,然后重新启动Chrome。
注意:如果不起作用,则很可能是因为您没有完全停止Chrome,注销并重新登录肯定会奏效。
--disable-print-preview
是绕过Chrome预览窗口并默认获取系统打印对话框选项的另一种方法。 - timbrownchrome://restart
,然后按回车键。 - pmiguelpintoHere are two code samples you can try:
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();
}
使用PHP中的TCPDF创建PDF。将PDF存储在服务器上。将其放入“打印队列”文件夹中。赞TCPDF,有点难学,但非常非常好用。请注意,我们使用avery 5167每页打印80个带有条形码的标签,准确度非常高。我们有标签、支票和发票打印队列。不同的文件夹基本上是为了不同的打印机。
使用包含的shell脚本通过FTP连接服务器,下载PDF,从服务器中删除PDF,将PDF发送到打印机,然后再次删除PDF。
使用连接到打印机的本地计算机,在终端中运行脚本。显然修改您的打印机和路径。
因为您总是希望这个运行,并且因为您使用MAC,所以使用自动化程序创建一个“应用程序”。启动自动化程序,在“运行shell脚本”中放置脚本并保存。然后将该应用程序放在登录项中。如果您想在MAC上查看“输出”窗口,请参见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
如果您想查看输出结果,请保留该应用程序和自动化脚本。 选择“运行Apple脚本”选项:
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
说实话,我在这里有些想法.. 但是可以通过 applet 或某种形式(无论是 Java 还是其他)来完成,该应用程序被授予受信任的权限(例如 Intranet 区域内)或类似权限?
可能值得研究每个区域可以获得什么权限?
根据谷歌的搜索结果,我认为你肯定面临着挑战,目前我看到的大多数文章都涉及打印到 连接到服务器的打印机。
如果是内部的,是否可以将打印从服务器传输到部门/用户打印机或其他设备上?