首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP实现公民标签打印机的DPD标签打印

使用PHP实现公民标签打印机的DPD标签打印
EN

Stack Overflow用户
提问于 2016-05-07 07:57:32
回答 3查看 3.3K关注 0票数 1

任何帮助都将不胜感激。我们正在尝试连接一个php系统来自动打印DPD标签到公民标签打印机。我们正在探索使用php_printer,它安装得很好,可以从我们的代码中看到打印机,DPD调用正在成功地在DPD网站上生成新的出货量。

问题

  1. 首先,这是使用php_printer将原始打印数据从PHP应用程序发送到公民标签打印机的最佳方法,还是有更好的方法?
  2. 其次,我们将在短期内进行一些实时测试,但是在DPD api get标签调用上似乎存在一个格式化问题,在这个调用中,我们检索原始的公民打印数据,将其直接发送到打印机以触发打印。

预期来自API示例的数据

代码语言:javascript
复制
\M3000\c0000\e\O0220\f290\n\a\LD11PISIH12
2911A0803340387DPD
2911A0603500375www.dpd.co.uk
1911A1003800095Responsible Delivery - CO Neutral
1911A08037802572
2911A0603780354Sender
2911A0603780346GEOPOSTUK LTD
2911A0603780338ROEBUCK LANE
2911A0603780330SMETHWICK
2911A0603780322BIRMINGHAM
------ etc

我们在输出.txt文件中收到下面的数据示例,因为斜杠没有出现在file_put_contents之后的文件中,而在我们的阅读器中,它们要么以空格形式出现,要么以黑圈形式出现。

实际数据我们正在接收

代码语言:javascript
复制
M3000c0000eO0220f290naLD11PISIH12
2911A0803340387DPD
2911A0603500375www.dpd.co.uk
1911A1003800095Responsible Delivery - CO   Neutral
1911A08037802572
2911A0603780354Sender
2911A0603780346GEOPOSTUK LTD
2911A0603780338ROEBUCK LANE
2911A0603780330SMETHWICK
2911A0603780322BIRMINGHAM

有人能建议我们需要配置的php头或输出设置,以确保没有从请求中删除任何内容吗?

PHP代码示例发送给DPD以获得标签:-

代码语言:javascript
复制
$shipmentId = 123456789;
$method = '/shipping/shipment/' . $shipmentId . '/label/';

$url = 'https://api.dpd.co.uk . $method;
$options = array(
'http' => array(
    'method' => 'GET',
    'Host' => 'api.dpd.co.uk',
    //'header' => "Accept: text/html\r\n" .
    'header' => "Accept: text/vnd.citizen-clp" .
    "GEOClient: account/" . $account_number . "\r\n" .
    "GEOSession: " . $session . "\r\n"
 )
);

$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
file_put_contents("dpd_test_citizen_clp.txt", $result);

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-17 16:05:21

对于那些需要知道如何实际打印该文件的人来说,数据是公民PRN格式的,可以使用Windows命令直接发送到打印机。

在命令提示符中:

代码语言:javascript
复制
COPY /B C:\FILENAME.PRN \\ComputerName\PrinterName

您需要为在\\ComputerName\PrinterName上可访问的公民打印机创建一个打印机共享

如果您在本地运行PHP以实现此目的,则可以使用:

代码语言:javascript
复制
file_put_contents("C:\dpd.prn", $data)
exec("COPY /B C:\DPD.PRN \\ComputerName\PrinterName")

如果您发现本地安装PHP太困难或太复杂,请考虑使用基本脚本语言,如AutoHotKey:https://autohotkey.com/

编辑:我已经编写了一个nodejs应用程序,您可以用websocket将发送到它的数据复制到本地公民打印机:https://github.com/MacroMan/DPDLocalPrinter

票数 2
EN

Stack Overflow用户

发布于 2016-05-12 04:46:59

Update:这实际上是DPD的API更改,因为它们从返回的输入中删除了\。所以上面的代码都很好,输出也和预期的一样。

票数 0
EN

Stack Overflow用户

发布于 2018-02-22 17:51:33

在经历了许多个小时的失败之后,我想我可以分享我们的解决方案。上面列出的一切都是正确的,唯一我们做错了的事情(我现在觉得很蠢!)是从邮递员复制API响应,而不是将file_push_contents('data.prn', $response)复制到新文件中。

复制并粘贴来自postman的响应,或者DPD文档将减少所有需要的位数以使其工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37086021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档