PHP打印到网络打印机

时间:2016-12-06 14:56:29

标签: php network-printers

我想做什么

在传递打印参数(如颜色,方向,双面打印等)时在网络打印机上打印PDF文档。

更多信息

  • 我们有多个网络打印机,其中 IP 静态且已知(即192.168.0.10)
  • 我发现文档包含参数/选项列表,可以将其传递给打印机以更改打印设置 {{3} (其中大部分可以在第25页找到)
  • 我们正在创建一个流程,通过该流程我们将打印黑白文档,但第二页除外。这意味着第一页以及第3页及以后黑白打印; 第2页将以颜色 打印。 (这是由于彩色打印的成本,加上我们的其他页面不包含颜色,因此以彩色打印它们是非常无意义的,并且大约要贵8倍 - 这个过程每个月会打印数千页,这增加了最多很多$$$)

我曾经<有点>成功

我登录了其中一台打印机(192.168.0.10 - 理光MP C5503 [如果你真的必须知道])并添加了FTP访问权限
使用Windows中的命令提示符打印文档!

> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\file.pdf filetype=PDF
> bye

我试图做的事情

尝试使用PHP的exec()函数
我已经尝试了很多方法让exec工作,但无济于事。我无法使用PHP的exec函数运行多行命令(理想情况下,运行以下命令)。在exec()中运行以下命令时,我无法连接到FTP,因为必须在上一行运行后执行每一行。我在网上找不到任何内容(多次谷歌搜索没有结果[除了如何从cmd回显多个输出行 - 不是如何连续插入多个cmd行])

> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\test.pdf filetype=PDF
> bye

尝试2使用PHP的exec()函数
我尝试通过传递文本文件来运行ftp命令,作为here帖子建议的一些答案。此解决方案无法按预期工作。从命令提示符运行ftp -i -s:test.txt时,这有效;在PHP中,它没有。

PHP文件

exec("ftp -i -s:test.txt");

文本文件( test.txt

open 192.168.0.10
username
password
put test.pdf filetype=PDF
bye

使用PHP的FTP功能尝试3
我现在无法弄清楚的是如何通过ftp将文件发送到打印机以及如何设置打印机设置

$ftp = [
    'server'   => gethostbyaddr('192.168.0.10'),
    'username' => 'username',
    'password' => 'password',
];
$conn = ftp_connect($ftp['server']);
$login = ftp_login($conn, $ftp['username'], $ftp['password']);
if (is_readable($file)) {
    if (ftp_put($conn, $file, $file, FTP_ASCII)) {
        echo 'Successfully executed command';
    }
    else {
        echo 'Failed execution of command';
    }
}
else {
    echo 'File is not readable';
}

理想情况下...

我正在寻找适用于Windows和Linux系统的解决方案,因为我们也正在从IIS迁移到NGINX(感谢上帝......)。我认为最好的实现方法是使用ftp用于Windows,rcprsh用于Linux(因为我在附加的打印机文档中提供了更多信息我想要做的事情部分中提到了这些打印方法。

如果我们不必生成txt文件或其他文件类型以便打印这些文档,我也很喜欢。我们的用户可能一次处理数百个文件,我知道我们可以唯一地命名每个txt文件,然后在脚本成功运行后删除,尽管我更喜欢一个干净的解决方案,我们可以传递参数,如打印机(来自gethostbyaddr()功能的IP或名称),用户名,密码,要打印的文件,选项(即颜色,双面打印,文件类型,方向,装订等)。我们正在使用MDPF来生成我们的PDF文件,所以一个方法可以放置文件而不在我们的服务器上实际创建它然后我们必须删除它将是首选(即this电子邮件的字符串附件)但这些不是必需的。

另外

解决方案必须与PHP一起使用。

我发布此文件后,我将继续研究更多在网络打印机上打印文档的方法,直到找到可行的解决方案,并在每次尝试后相应地更新我的帖子。

非常感谢有关此方面的任何帮助。

<小时/> <小时/>

编辑

不成功的方法

方法:PHP打印机功能

MPDF允许打印,但不允许控制打印作业(彩色/黑白打印,文件类型,双面打印等选项)。因此,这个选项(除非某人有&#34; hack&#34;,将无效)

方法:JavaScript / AJAX

虽然JavaScript / AJAX可用于打印(并允许打印设置),但我们将同时处理数百页,并且处理可能是将打印作业推送到多台打印机(即在不同的办公室)。我们的想法是为这个过程和未来的流程自动化我们的打印。

未经测试的方法

方法:尚未测试

2 个答案:

答案 0 :(得分:2)

试试这个:

$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
    if(ftp_put($ftp,'filetype=PDF','yourfile.pdf',FTP_BINARY)){
        echo 'success';
    }
}

让我知道你得到了什么。

第19页的the printer's manual

更新:, 您可以使用以下命令发送文件并同时设置设备选项:

ftp> put file1 filetype=postscript,tray=tray1,copies=3,resolution=600

在该示例中,file1是您要发送的本地文件名,filetype=postscript,tray=tray1,copies=3,resolution=600是远程文件名。 确切地说,实际的FTP命令是:

STOR filetype=postscript,tray=tray1,copies=3,resolution=600

使用PHP的FTP功能,PHP代码为:

ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY);

$ftp是从成功调用到ftp_connect()的连接句柄。

将它放到我的第一个例子中,代码变为:

$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
    if(ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY)){
        echo 'success';
    }
}

试一试。

答案 1 :(得分:0)

尽管,我的很多尝试都无法在网络打印机上打印,并且找不到合适的解决方案。而且shell_exec(“ AcroRd32.exe”)和通过“ other pdfprinter”无法使用,因为我的WAMP服务器需要GUI程序的特殊权限。现在,我终于找到了适合我的解决方案。

  

这仅适用于Windows解决方案

下载PDFtoPrinter

要在网络/本地打印机上打印的代码

$command = escapeshellcmd('PDFtoPrinter YOURFILE.PDF "\\\YOURSERVERNAME\YOURPRINTERNAME"');
$output = shell_exec($command);
echo $output;