使用javascript打印本地文件


Print a local file with javascript

今天我遇到了一个关于php+javascript+html+css:的艰巨挑战

我正在创建一个"授权+打印"的应用程序:该应用程序必须在本地apache中运行(最好在windows下),并且需要连接到云中的数据库。这很容易。通过用户身份验证后,必须显示授权文件的列表,这也是另一项简单的任务。它起作用了。但现在疯狂的是:我想在不让用户选择和查看任何打印选项的情况下打印它们,只需一个按钮"打印"。打印配置在.txt文件中,我需要配置打印,将文件和配置发送到打印机。

我搜索了很多,但我只看到"打印此页"按钮或shell解决方案(windows的gsview和gsprint,但我无法使用,因为我无法配置打印选项)。我需要更复杂的东西。你能帮我吗?(我现在正在尝试fpdf,但是…天哪,我不明白如果这可以用来做我想做的事。

非免费/已安装的解决方案也有帮助。

此外,我需要打印多个文件,但这是可选的(我可以做任何类似"while"的事情)

PD:对不起我的英语水平。

从客户端打印=通过javascript从浏览器打印

从客户端(=从浏览器内部)是不可能做到这一点的。有一些破解的解决方案,可能适用于IE,比如这里的解决方案:HTML/Javascript一键打印(没有对话框),但通常"如果你尝试打印,对话框会弹出"="window.Print()"的默认行为。

从服务器端打印

基本上,您使用服务器端(PHP)来打印文档,而不是使用客户端。因此,您可以使用Ajax请求(用户单击打印按钮)将要打印的文件名或内容交给服务器上的"print.php"文件,该文件负责将内容推送到打印机。

当然,你必须知道用户希望在哪台打印机上打印内容…

从PHP打印有几种方法。

一种选择是使用php_printer扩展:

$handle = printer_open(); 
printer_set_option($handle, PRINTER_MODE, "raw"); 
printer_write($handle,$myfile); 
printer_close($handle);

或者仅将copyprint连接到打印机:

exec('copy C:'file.txt com1');
exec('copy C:'file.txt lpt1');
exec('print /d:LPT1: C:'file.txt');

如果你有网络打印机,你可以尝试将内容发送到网络地址。有一些PHP实用程序可以使用LPR:https://github.com/Craswer/PhpNetworkLprPrinter

引用:https://stackoverflow.com/a/5695181/1163786


评论中的问题:如何在Windows上从PHP设置打印机选项?

这在Linux上非常容易,因为lpr接受选项lpr <options>,但在Windows上不是这样。因此,这里有一些特定于Windows的技巧来配置打印机:

Windows7有PRINTUI.EXE-RUNDLL32 PRINTUI.DLL,PrintUIEntry 的缩写

有关示例,请参阅PrintUI参考

您可以手动配置打印机,例如激活双工模式,然后保存设置文件并在从PHP打印时重用它。这允许使用多个打印机配置文件。

最简单的方法是在env中配置打印机,然后按名称访问它,"Printer-HP-XY-DuplexOn-2PagesOn1"。换句话说:它是在外部配置的,而不是从PHP内部配置的,只能从那里访问。