javascript/php中的批量打印


Bulk print in javascript/php?

有什么方法可以在javascript.php中实现批量/批量打印吗?我在网上搜索了一下,发现的大多数答案都是.netjava。我一次需要排队大约600份文件。我找到了PECL打印机库,但医生说是only available under Windows 9.x, ME, NT4 and 2000PECL library在linux服务器下工作吗?使用PECL库好吗?或者还有其他选择吗?

在Windows中控制打印机不是什么大任务,因为我们有很多win32api可用,或者可以创建入口点来动态打印。由于PHP是服务器端,JavaScript是客户端脚本语言。

根据我的说法,未经许可/通知在客户端批量打印/打印是不可能的。因此,用户必须授权打印作业。

开发人员在Linux下打印的经验较少。就连我自己也不知道多少,但我知道一种方法。我从来没有尝试过,也没有做过。在PHP下没有任何内置的打印/控制功能。PHP下没有这样的扩展也可以这样做。但在Linux下,有一个被称为LPR的命令(Line printer daemon protocol),如果shell_exec在PHP下被授权执行shell命令,它可以在PHP下用于打印。命令遵循:

shell_exec("lpr -P 'printer' -r 'filename.txt');

您必须通过LPR的RFC协议。您必须为守护程序创建用于控制和发送打印命令的抽象层。这里提供了一个创建守护进程的好例子。

在经历了这些之后,您将能够通过PHP在Linux下打印文档。

附加问题

想要通过网站/本地主机进行客户端打印

小答案

不,未经用户许可,您无法直接控制客户端打印机,这也取决于每个会话。所以,如果你想获得访问是另一个会话,你必须再次获得用户的权限。

答案很长

是的,它可以通过许多调整和在特定条件下进行控制。由于大多数用户都使用windows来提供相应的答案。但要理解它的工作原理,您必须了解打印对话框的内部结构。

打印对话框分为两部分。一个是Windows API,另一个是打印机驱动程序。Windows API是一组公共代码,由各种动态链接库(Dynamic Link Library,动态链接库)持有,这些动态链接库是Windows操作系统的一部分。Windows API提供了一个允许所有程序使用的公共干扰,允许所有程序访问同一组打印机驱动程序,而不是打印机制造商必须创建驱动程序软件。

打印机驱动程序是用不同的语言创建的,它们控制硬件的不同部分向打印机发送指令。控制流程的主要打印机驱动程序是PCL5和PostScript等。打印机驱动程序更改特定打印机所能理解的自定义标记语言。

因此,基本上我们需要直接访问DLL,通过现代浏览器(Chrome、Firefox等)是不可能的,但一个浏览器可以提供访问,即Internet Explore,这是Windows操作系统本身的一部分。

因此,第一个条件是用户必须使用Internet Explorer,我不知道通过其他访问。接下来是通过ActiveX控件直接访问API。原则上,它不依赖于Microsoft Windows,但在实践中,大多数ActiveX控件需要Microsoft Windows或Windows模拟器。大多数还要求客户端在英特尔x86硬件上运行,因为它们包含编译过的代码

因此,ActiveX控件只能通过用户提示访问。因此,用户必须手动更改控件,或者用户必须再次提供对网页的访问。如果设置被更改,那么计算机将面临巨大的危险,因为它可以访问计算机硬件和其他组件。这台电脑很容易被黑客入侵。因此,您必须非常谨慎地使用它。因此,第三个条件是直接访问ActiveX控件

我使用过ScriptX,免费版本可以让你设置一些基本参数,见下面的例子:

<!-- MeadCo ScriptX -->
<object id=factory style="display:none"
  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
  codebase="http://[your path here]/smsx.cab#Version=7.0.0.8 ">
</object>

<script>
  function printWindow() {
    factory.printing.header = "This is MeadCo";
    factory.printing.footer = "Printing by ScriptX";
    factory.printing.portrait = false;
    factory.printing.leftMargin = 1.0;
    factory.printing.topMargin = 1.0;
    factory.printing.rightMargin = 1.0;
    factory.printing.bottomMargin = 1.0;
    factory.printing.Print(false);
  }
</script>

我已经提供了做这件事的方法,你必须根据你的要求休息。我再次告诉你,请不要更改ActiveX的设置以启用它,这对用户造成了巨大的威胁。机器很容易被黑客入侵,对计算机中的可用信息构成极大威胁。

PECL printer library用于服务器端打印。您必须将打印机连接到脚本运行的服务器。

如果你的客户端需要打印,你不能使用它。你不能单独用JS来完成"打印机排队"。如果您被限制只能使用浏览器,最好的方法是将您想要打印的所有页面加载到一个HTML页面中,并使用适当的CSS分页符。但请注意,根据一个页面的大小,可能会出现浏览器性能问题。

你可以做的另一件事是将HTML内部转换为PDF,然后允许客户端打印它。这不允许排队,但可以达到目的。

为什么不在之前使用css分页符来告诉浏览器内容应该在新页面中,并根据需要多次克隆元素

例如

.page
{
    page-break-before: always;
}
<div class="page">
  something to be printed in a whole page
</div>
<div class="page">
  something to be printed in a whole page
</div>
<div class="page">
  something to be printed in a whole page
</div>