在传递打印参数(如颜色,方向,双面打印等)时在网络打印机上打印PDF文档。
我登录了其中一台打印机(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,rcp
或rsh
用于Linux(因为我在附加的打印机文档中提供了更多信息在我想要做的事情部分中提到了这些打印方法。
如果我们不必生成txt文件或其他文件类型以便打印这些文档,我也很喜欢。我们的用户可能一次处理数百个文件,我知道我们可以唯一地命名每个txt文件,然后在脚本成功运行后删除,尽管我更喜欢一个干净的解决方案,我们可以传递参数,如打印机(来自gethostbyaddr()
功能的IP或名称),用户名,密码,要打印的文件,选项(即颜色,双面打印,文件类型,方向,装订等)。我们正在使用MDPF来生成我们的PDF文件,所以一个方法可以放置文件而不在我们的服务器上实际创建它然后我们必须删除它将是首选(即this电子邮件的字符串附件)但这些不是必需的。
解决方案必须与PHP一起使用。
我发布此文件后,我将继续研究更多在网络打印机上打印文档的方法,直到找到可行的解决方案,并在每次尝试后相应地更新我的帖子。
非常感谢有关此方面的任何帮助。
<小时/> <小时/>
MPDF允许打印,但不允许控制打印作业(彩色/黑白打印,文件类型,双面打印等选项)。因此,这个选项(除非某人有&#34; hack&#34;,将无效)
虽然JavaScript / AJAX可用于打印(并允许打印设置),但我们将同时处理数百页,并且处理可能是将打印作业推送到多台打印机(即在不同的办公室)。我们的想法是为这个过程和未来的流程自动化我们的打印。
答案 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解决方案
要在网络/本地打印机上打印的代码
$command = escapeshellcmd('PDFtoPrinter YOURFILE.PDF "\\\YOURSERVERNAME\YOURPRINTERNAME"');
$output = shell_exec($command);
echo $output;