4

我一直在寻找执行此操作所需的内容,并最终感到有些困惑。

让我们直截了当地说,这是一个基于本地的 Intra-net,我知道 PHP 是服务器端的。

我在基于 Web 的 PHP、JAVA、Jquery Idea 上运行公司管理解决方案。我们想直接从“LINUX”服务器打印报告和收据等。

我已经在服务器上安装了 cups 并且服务器打印正常,我现在只是坚持是否真的可以让服务器打印我们直接从 PHP 代码生成的 pdf 文件。

即使我们有一个 bash 脚本来运行并检查一个目录打印 pdf 然后删除它,我也会很高兴,即使我暂时认为这是一种解决方法。

就像我说的,我确实明白,如果这是在 WWW 上完成的,那么就会有某些可以利用的漏洞。如果我要在 www 上运行该系统,我将拥有一个完全不同的站点,该站点不允许打印,并且不需要此功能。

先感谢您

亚历克斯

4

3 回答 3

2

如果 CUPS 配置正确,从 shell 打印 PDF 就像

lpr myfile.pdf

因此,一旦您将 PDF 写入临时文件,您就可以使用任何可用的 PHP 函数来执行该 shell 命令:exec()、、、shell_exec()system()

您甚至可以在不编写临时文件的情况下执行此操作,并lpr通过 STDIN 直接将数据提供给(尝试cat myfile.pdf | lpr作为 shell 上的示例)。

如果您使用proc_open(). PHP 手册中的第一个示例可以适应如下内容:

<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
);

$process = proc_open('lpr', $descriptorspec, $pipes);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt

    fwrite($pipes[0], $pdf_data);
    fclose($pipes[0]);
}
?>
于 2012-06-23T10:39:54.223 回答
1

使用PHP::PRINT::IPP

这是使用 PHP 从 Web 打印的最安全和最简单的方法。在这里,您不必启用可利用的 php 函数exec(),例如shell_exec()等。

基本用法

 <?php
  require_once(PrintIPP.php);

  $ipp = new PrintIPP();                        
  $ipp->setHost("localhost");
  $ipp->setPrinterURI("/printers/epson");
  $ipp->setData("./testfiles/test-utf8.txt"); // Path to file.
  $ipp->printJob();                                                          
?>

参考

于 2015-03-02T13:28:33.263 回答
0

明智地使用 phpshell_exec()应该允许您在创建 PDF 后立即同步打印 PDF,从而避免使用 bash。

我没有用于shell_exec()打印,因此无法提供详细信息,但本质上,如果您可以成功编写 UNIX 打印命令,那么您可以编写shell_exec()指令。

于 2012-06-23T10:05:17.430 回答