2008-08-22 62 views
36

我正在研究需要静默打印的Web应用程序 - 即没有用户参与。什么是实现这一目标的最佳方式?它不喜欢它可以严格使用Javascript,Flash和/或AIR来完成。我见过的最接近的Java applet。“无声”在Web应用程序中打印

我可以理解为什么它只是任何网站能够做到这一点的坏主意。这个特定的实例用于内部应用程序,并且如果用户需要将URL添加到受信任的站点列表,安装插件等,这是完全可以接受的。

+0

那是什么工作了吗? – noamtm 2011-10-31 07:28:40

+4

我们结束了使用Java小程序。这是一场噩梦。通常它会是可怕的解决方案,但因为这是2008年北京奥运会,增加的距离和语言差异使其成为一场噩梦。 最后,它的工作“足够”。但再次,噩梦。我不会推荐nd它。 – Bill 2012-02-19 06:08:48

+0

如果你偶然发现Java applet路线不再工作得很好,这里有一个很好的讨论:http://stackoverflow.com/questions/27057816 – tresf 2016-03-30 14:32:31

回答

0

我必须诚实,我有点在这里想出来..但是不能用一个小程序或者某种类型的东西(不管是Java还是其他)给予可​​信任的权限(比如在Intranet区域内)或者其他什么东西?

可能值得调查每个区域可以授予哪些权限?

继谷歌之后,我认为你肯定有挑战,到目前为止,我看到的大多数文章都涉及到打印到printers connected to the server

如果它的内部,是否可以将打印从服务器路由到部门/用户打印机或其他?

1

我写了一个python tsr,每隔一段时间就轮询一次服务器(它从服务器拉出轮询频率),然后打印出标签打印机。相对不错。

一旦使用python编写,我使用了py2exe,然后使用inno安装编译器,然后放在intranet上并让用户安装它。

这不是很好,但它的工作。用户将在早上启动它,并且该程序将在晚上从服务器接收到kill命令。

6

这里有两个代码示例,您可以尝试:

<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> 

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区域。

0

如果它只是一个内部应用程序,那么您可以避免从浏览器打印,并直接从服务器发送打印输出到最近的打印机给用户。

29

以下是您需要做的,以便在不显示打印首选项对话框的情况下使Firefox立即打印。

  1. 在Firefox的地址栏输入about:config,然后按Enter键。

  2. 右键点击页面上的任何位置处,并选择New>布尔

  3. 输入偏好名print.always_print_silent,然后单击确定。


我发现,地方和它帮助我

1

我有工作了一整天长时间使用一个简单的JSP页面和Java的PDF渲染器库(https://pdf-renderer.dev .java.net)。这是可行的,因为Java使用操作系统而不是浏览器进行打印。假设“无声打印”被认为是浏览器漏洞/漏洞利用,并且在IE 6之后进行了修补,所以运气好的话可以通过Javascript或Active X进行工作。也许可能,但是如果没有Java,我无法实现它。

0

我在这里同样的问题,这是我迄今为止学习。

答:你需要安装一个IPP打印服务器

您有多个打印服务器实现,你可以尝试。

  1. 硬件IPP打印服务器:像DLINK DPR-1020或类似的,某些打印机具有此功能内置。

  2. Linux服务器与CUPPS:与ISS http://www.howtoforge.com/ipp_based_print_server_cups

  3. XP-PRO服务器:http://www.michaelphipps.com/ipp-print-server-windows-xp-solution

B .:你需要让你的Web应用程序这个IPP服务器,所以你拾波的客户端处理 - 将每个用户的打印请求发送到打印服务器。

PHP :: PRINT :: IPP是一个php lib,你可以试试(它在杯子服务器上测试过)。

5

我们也遇到过类似的问题。我们需要在支票打印机上打印支票,在标签打印机上打印支票,并在零售店embrasse-moi的发票打印机上打印客户发票。我们有虚拟电脑,角落,ipad,没有打印功能的iphones。打印发票功能基本上是无声打印。将pdf写入服务器,并在本地使用shell脚本来检索并打印。

我们用最小的图书馆一个完美的解决方案如下:在PHP

  1. 使用TCPDF创建PDF。将PDF存储在服务器上。将其放入“打印队列”文件夹中。 TCPDF的荣誉,有点难学,但SICK SICK SICK。请注意,我们使用具有完美精度的条形码的avery 5167在每页上打印80个标签。我们有一个标签,检查和发票打印队列。基本上针对不同打印机的不同文件

  2. 使用附带的shell脚本通过FTP连接到服务器,下载PDF,从服务器上删除PDF,将PDF发送到打印机,并再次删除PDF。

  3. 使用连接到打印机的本地计算机,在终端中运行脚本。显然修改您的打印机和路径。

  4. 因为你总是想要这个运行,并且因为你使用MAC,所以使用automator创建一个'app'。启动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的脚本,如果你想看到的输出,保持应用程序的脚本 选择运行苹果脚本选项:

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 
0

你应该看看PrintNode。他们为Web应用程序提供静默远程打印服务。您在桌面上安装了一个与其服务器同步的软件。然后,您可以使用json请求发送printjob,并立即打印出来。

4

正如@Axel所写,Firefox有print.always_print_silent选项。

对于Chrome浏览器,使用--kiosk-printing选项跳过打印预览对话框:

编辑用来启动Chrome和添加快捷方式“--kiosk打印”,然后重新启动浏览器。

注意:如果它不起作用,很可能是因为您没有完全停止Chrome浏览器,注销并重新登录后肯定会伎俩。

1

我知道这是一个较老的主题,但它仍然是谷歌搜索'静音打印'的首选,所以我会添加我的调查结果,以利于现在任何人的发现。

我们有一个类似的问题,打印库存系统的各种打印机的各种类型的标签。这需要一些试验和错误,但是我们通过让系统创建标签的pdf来解决这个问题,打印机名称和页面数量以pdf格式编码。所有你需要做的是: 在IE浏览器中,转到Internet选项>>安全>>受信任的站点>>站点 清除'对该区域中的所有站点需要服务器验证(https :)' 加“http://[yoururl]” 和该pdf将自动打印出来。

当我们最初设置时,我们使用Chrome作为默认浏览器,但2015年9月,Chrome降低了运行NPAPI插件的能力。这意味着你不能再选择Adobe PDF插件作为默认的PDF处理程序,而内置的pdf插件不能处理无声打印:-( 它仍然可以在IE浏览器中工作(在编写本文时为IE11) VE没有尝试过任何其他浏览器。

HTH 干杯, 的NiGe

相关问题