关于浏览器:Web应用程序中的“静音”打印

关于浏览器:Web应用程序中的“静音”打印

“Silent” Printing in a Web Application

我正在开发一个需要静默打印的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之后,我想您一定会遇到挑战,到目前为止,我所见的大多数文章都涉及到与服务器连接的打印机进行打印。

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


    推荐阅读