我正在开发一个需要静默打印的 Web 应用程序——即无需用户参与。实现这一目标的最佳方法是什么?它不喜欢严格使用 Javascript、Flash 和/或 AIR 来完成。我见过的最接近的涉及Java 小程序。
我可以理解为什么任何网站都能够做到这一点是一个坏主意。此特定实例用于内部应用程序,如果用户需要将 URL 添加到受信任的站点列表、安装插件等,这是完全可以接受的。
我正在开发一个需要静默打印的 Web 应用程序——即无需用户参与。实现这一目标的最佳方法是什么?它不喜欢严格使用 Javascript、Flash 和/或 AIR 来完成。我见过的最接近的涉及Java 小程序。
我可以理解为什么任何网站都能够做到这一点是一个坏主意。此特定实例用于内部应用程序,如果用户需要将 URL 添加到受信任的站点列表、安装插件等,这是完全可以接受的。
以下是启用 Firefox 立即打印而不显示打印首选项对话框所需执行的操作。
在 Firefox 的地址栏输入 about:config 并按 Enter。
右键单击页面上的任意位置,然后选择 New > Boolean
输入首选项名称作为 print.always_print_silent 并单击确定。
我在某个地方找到了它,它帮助了我
正如@Axel 所写,Firefox 有 print.always_print_silent 选项。
对于 Chrome,使用--kiosk-printing
选项跳过打印预览对话框:
编辑用于启动 Chrome 的快捷方式并添加“--kiosk-printing”,然后重新启动 Chrome。
注意:如果它不起作用,很可能是因为您没有完全停止 Chrome,注销并重新登录肯定会成功。
以下是您可以尝试的两个代码示例:
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();
}
您可能需要将您正在测试的站点/页面添加到本地 Intranet 区域。
我们遇到了类似的问题。我们需要将支票打印到支票打印机,将标签打印到标签打印机,并将客户发票打印到零售店embrasse-moi的发票打印机。我们有没有打印功能的虚拟电脑、角落、ipad、iphone。打印发票功能基本上是无声打印。将 pdf 写入服务器,并在本地使用 shell 脚本检索并打印。
我们将以下内容用于具有最少库的完美解决方案:
在 PHP 中使用 TCPDF 创建 PDF。将 PDF 存储在服务器上。将其放入“打印队列”文件夹中。感谢 TCPDF,有点难学,但是 SICK SICK SICK。请注意,我们每页使用 avery 5167 打印 80 个标签,其条码非常准确。我们有一个标签、支票和发票打印队列。不同的文件夹基本上适用于不同的打印机。
使用包含的 shell 脚本通过 FTP 连接到服务器,下载 PDF,从服务器上删除 PDF,将 PDF 发送到打印机,然后再次删除 PDF。
使用连接到打印机的本地计算机,在终端中运行脚本。显然修改您的打印机和路径。
因为您总是希望它运行,并且因为您使用 MAC,所以使用 automator 创建一个“应用程序”。启动 automator,将脚本放入“运行 shell 脚本”并保存。然后将该应用程序粘贴到登录项中。如果您想查看 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
如果要查看输出,请使用 automator 脚本,让应用程序与脚本一起选择运行 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
我知道这是一个较旧的线程,但它仍然是谷歌搜索“无声打印”的热门搜索,所以我将添加我的发现,以帮助现在遇到这个问题的任何人。
我们在将各种类型的标签打印到库存系统的各种打印机时遇到了类似的问题。这需要一些尝试和错误,但我们通过让系统创建标签的 pdf 来解决它,其中打印机名称和页面数量在 pdf 中编码。然后您所要做的就是:在 IE 中,转到 Internet 选项 >> 安全 >> 受信任的站点 >> 站点 清除“要求此区域中所有站点的服务器验证 (https:)”添加“ http://[yoururl] " 并且 pdf 将自动打印出来。
当我们最初设置它时,我们使用 Chrome 作为默认浏览器,但在 2015 年 9 月,Chrome 放弃了运行 NPAPI 插件的能力。这意味着您不能再选择 Adobe pdf 插件作为默认的 pdf 处理程序,并且内置的 pdf 插件不处理静默打印 :-( 它在 Internet Explorer 中仍然有效(撰写本文时为 IE11)但我已经没有尝试任何其他浏览器。
HTH 干杯,尼日
我编写了一个 python tsr,它经常轮询服务器(它从服务器中提取轮询频率)并打印到标签打印机。相对不错。
用 python 编写后,我在上面使用了 py2exe,然后 inno setup 编译器,然后放在 Intranet 上并让用户安装它。
这不是很好,但它奏效了。用户会在早上启动它,程序会在晚上从服务器接收终止开关。
我使用一个简单的 JSP 页面和 Java PDF Renderer 库 (https://pdf-renderer.dev.java.net) 让它整天工作。这是有效的,因为 Java 使用操作系统而不是浏览器进行打印。据说“静默打印”被认为是浏览器漏洞/利用,并在 IE 6 之后进行了修补,所以祝你好运让它通过 Javascript 或 Active X 工作。也许有可能,但我无法在没有 Java 的情况下工作。
老实说,我在这里有点想大声.. 但是不能用一个小程序或某种(无论是 Java 还是其他)被授予受信任权限(例如 Intranet 区域内的权限)或其他东西来完成?
可能值得研究可以为每个区域授予哪些权限?
跟着谷歌,我想你肯定有一个挑战,到目前为止我看到的大多数文章都涉及打印到连接到服务器的打印机。
如果它是内部的,是否可以将打印从服务器路由到部门/用户打印机或其他东西?
如果它只是一个内部应用程序,那么您可以避免从浏览器打印,而直接从服务器发送打印输出到离用户最近的打印机。
我在这里遇到同样的问题,这是我到目前为止所学到的。
A.: 您需要设置一个 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 库(它在 cups 服务器上经过了很好的测试)。
你应该看看PrintNode。它们为 Web 应用程序提供静默远程打印服务。您在桌面上安装了一个与他们的服务器同步的软件。然后,您可以使用 json 请求发送打印作业,它们会立即打印出来。