今天,我在php + javascript + html + css方面遇到了艰巨的挑战:
我正在创建一个“授权+打印”应用程序:该应用程序必须在本地apache中运行(最好在Windows下),并且需要连接到云中的数据库。这很简单。通过用户身份验证后,必须显示授权文件列表,这也是另一项简单的任务。工作正常但是现在变得疯狂了:我想在不让用户选择并看到任何打印选项的情况下打印它们,而只是单击“打印”按钮。打印配置位于.txt文件中,我需要配置打印,然后将文件和配置发送到打印机。
我进行了很多搜索,但是我只看到“打印此页”按钮或外壳解决方案(用于Windows的gsview和gsprint,但由于无法配置打印选项而无法使用)。我需要更复杂的东西。你可以帮帮我吗? (我现在正在尝试fpdf,但是...哎呀,我不明白是否可以用它来实现我想要的功能。
非免费/已安装的解决方案也可能会有所帮助。
另外,我需要打印多个文件,但这是可选的(我可以执行“ while”之类的操作)
PD:对不起,我的英语水平。
最佳答案
从客户端打印=通过javascript形成浏览器
无法从客户端(=从浏览器内部)执行此操作。
有一些骇人听闻的解决方案,可能适用于IE,例如此处的HTML / Javascript One Click Print (no dialogs),但通常来说,“如果您尝试打印,将弹出对话框” =“ 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);
或者只是
copy
或print
到打印机: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 Reference。
您可以手动配置打印机,例如激活双面打印模式,
然后从PHP打印时保存设置文件并重新使用。
这允许使用多个打印机配置文件。
最简单的方法是在环境中配置打印机,然后按名称访问它,
“打印机-HP-XY-DuplexOn-2PagesOn1”。换句话说:它是在外部配置的,而不是从PHP内部配置的,只能从那里访问。