【问题标题】:Print a local file with javascript使用 javascript 打印本地文件
【发布时间】:2014-10-30 15:54:29
【问题描述】:

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

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

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

非免费/已安装的解决方案也可以提供帮助。

此外,我需要打印多个文件,但这是可选的(我可以执行任何类似“while”的操作)

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

【问题讨论】:

  • 除非这是一台联网打印机,否则无法在不显示打印对话框的情况下从浏览器进行打印。
  • 听起来他可能想从服务器端(apache/php)打印。
  • @epascarello 请不要说:阅读此内容:如何配置 mozilla 以不显示打印对话框并在预定打印机中使用预先建立的首选项进行打印。 forums.mozillazine.org/viewtopic.php?t=48336 这是我需要的一小部分。
  • @DigitalChris:我不需要从服务器端打印,可以从客户端完成(它是本地安装的 apache:服务器和客户端将是同一个 CPU)
  • @BarragánLouisenbairn 您正在为特定用户更改浏览器。如果您想让任何页面开始随机打印 100 个文档,那很好。

标签: javascript php file printing


【解决方案1】:

从客户端打印 = 通过 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);

或者只是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 Reference

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

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

【讨论】:

  • 是的,这是主要的答案,现在我正在与“如何使用 PHP 打印到 LPR”作斗争。您知道是否可以在发送文件之前配置打印?
  • 我已经附上了我的答案。
  • 好的,完美的答案,当有 15 个代表时我会给你投票。我只是添加一点信息:我创建了如何“在 Windows 中配置驱动程序”。安装资源工具包工具 Windows Server 2003(从这里:microsoft.com/en-us/download/details.aspx?id=17657)(you 可以在 win 7 x64 中安装它,兼容模式并选择 Work in previous version of windows-> Windows Server 2003)。然后您可以使用“setprinter.exe”命令对其进行配置。我现在正在学习如何使用它。 (配置 64 台打印机,不用谢 :_D?
  • "setprinter.exe" - 另一个过去的好东西 :) 我发现你也可以使用 PowerShell:Set-PrintConfiguration - technet.microsoft.com/en-us/library/hh918361.aspx
  • PowerShell 2.0 在 Windows 7 中以前是隐藏的:查看这个链接:(你有一个在 Win7 里面安装 v3.0 的链接:blogs.technet.com/b/heyscriptingguy/archive/2011/01/07/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多