使用RP327 80mm热敏收据打印机打印pdf格式化收据

时间:2017-01-05 07:51:03

标签: dompdf thermal-printer posprinter

我使用dompdf生成pdf格式的收据,而不是使用RP327 80mm Thermal Receipt Printer打印。但打印的收据不适合纸张。以下是打印收据pos receipt的附加图像。 这是我的html表,它被转换为pdf文件

<?php
ob_clean();
$dompdf = new DOMPDF();
$dompdf->set_option('default_font', 'Courier');

$customPaper = array(0,0,340,650);
//$dompdf->set_paper($customPaper);
$dompdf->set_option('enable_css_float',true);
//$dompdf->set_paper("A3", "portrait");

$html =' <html>
    <head><style>
        .table { display: table; width: 100%; border-collapse: collapse; }
        .table-row { display: table-row; }
        .table-cell { display: table-cell; border: 1px solid black; padding: 1em; }
    }
    span {  display: block;  }
    @page table {
      size: 340px 650px;
      margin: 0px;;
    }

    .table {
       page: table;
       page-break-after: always;
       font-size: 20px;
    }
    </style>
    </head>
    <body>
    <div class="table">
      <div class="table-row"><div class="table-cell" colspan="3" style="text-align: center"><img src="../../img/top-logo.png"></div></div>
        <div class="table-row">
          <div class="table-cell" ><span><b> Merchant: </b> '.$parceldetails['company'].' </span><span><b> Pick Addr: </b> '.$parceldetails['addr'].' </span><span><b> Mobile: </b> '.$parceldetails['mobile'].' </span></div>
           <div class="table-cell" style="padding: 0px">
           <div class="" >Delivery Date:</div><br>
           <div class="" style="border-bottom: 1px solid #000000"> '.$parceldetails['r_delivery_time'].' at '.$parceldetails['bytime'].'</div>

           <div class="">Agent:</div><br>
           <div class=""> '.$parceldetails['name'].' </div>
           </div>
        </div>
        <div class="table-row">
          <div class="table-cell" colspan="3" style="text-align: center"> <b style="font-size: larger">'.$ecr.'</b></div>
        </div>
        <div class="table-row">
           <div class="table-cell" colspan="1"><span><b>Customer Name:</b> '.$parceldetails['r_name'].'</span><span><b> Addr:</b> '.$parceldetails['r_address'].' </span><span><b> Mobile: </b> '.$parceldetails['r_mobile'].' </span></div>
           <div class="table-cell" style="padding: 0px">
              <div class="" style="border-bottom: 2px solid #000000; text-align: center"><b> '.$parceldetails['paymentmethod'].' </b></div>
              <div class="" style="text-align: center"><b> '.$parceldetails['product_price'].' BDT </b></div>
           </div>
         </div>
         <div class="table-row">
           <div class="table-cell"  style="text-align: center"> '.genarateQRCode($data).' </div>
            <div class="table-cell"  style="padding: 0px">
              <div class="" style="border-bottom: 2px solid #000000; text-align: center; height:63px"> Delivered </div>
              <div class="" style="text-align: center; min-height:63px"> Cancel </div>
           </div>
            <div class="table-cell" style="padding: 0px">
              <div class="" style="border-bottom: 2px solid #000000; text-align: center; height:63px">&#160;</div>
              <div class="" style="text-align: center; min-height:63px""></div>
           </div>
        </div>
        <div class="table-row">
          <div class="table-cell" colspan="3">
          <b style="margin-top:50px; margin-bottom:-10px; border-bottom: 1px solid #000000; font-size:10px; margin-left:10px">Agent signature</b>
          <b style="margin-top:50px; margin-bottom:-10px; border-bottom: 1px solid #000000; font-size:10px; margin-left:50px">Receiver signature</b></div>
        </div>
      </div>';
      $html .='<table class="table">
      <tr>
       <td colspan="3"><img src="../../img/top-logo.png"></td>
      </tr>
      <tr>
        <td rowspan="2" colspan="2"><span><b> Merchant: </b> '.$parceldetails['company'].' </span><span><b> Pick Addr: </b> '.$parceldetails['addr'].' </span><span><b> Mobile: </b> '.$parceldetails['mobile'].' </span></td>
        <td>D. Date<span>'.$parceldetails['r_delivery_time'].'</span></td>
       </tr>
       <tr>
        <td>Agent<span>'.$parceldetails['name'].'</span></td>
       </tr>
      <tr>
        <td colspan="3">'.$ecr.'</td>
      </tr>
        <tr>
        <td rowspan="2" colspan="2"><span><b>Customer Name:</b> '.$parceldetails['r_name'].'</span><span><b> Addr:</b> '.$parceldetails['r_address'].' </span><span><b> Mobile: </b> '.$parceldetails['r_mobile'].' </span></td>
        <td><b>'.$parceldetails['paymentmethod'].'</b></td>
      </tr>
      <tr>
         <td><b>'.$parceldetails['product_price'].' BDT</b></td>
      </tr>
      <tr>
        <td rowspan="2" colspan="1">'.genarateQRCode($data).'</td>
        <td>Delivered</td>
        <td></td>
      </tr>
      <tr>
         <td>Cancel</td>
         <td></td>
      </tr>
        <tr>
        <td colspan="3">&nbsp</td>
      </tr>
        <tr>
        <td colspan="3">Agent Signature Receiver Signature</td>
      </tr>
    </table>
    </body>
    </html>';
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("dompdf_out.pdf", array('Attachment' => 0));
<?>

2 个答案:

答案 0 :(得分:0)

根据链接的打印机规格,打印机能够打印宽度为72毫米或64毫米。这相当于大约204pt和181pt(分别)。我不是依赖更大的纸张尺寸并限制您的内容宽度,而是尝试在您所拥有的限制范围内工作。

您还应该记住,dompdf会根据为文档指定的DPI将基于像素的测量值转换为适当的点大小。如果您希望HTML文档与呈现的PDF之间一一对应,则应将Dompdf DPI设置为72,因为PDF PPI固定为72.

考虑到这一点,这是我的建议。我假设您根据方法调用使用Dompdf 0.6.x.

  1. 适当设置纸张尺寸。我们假设您有72毫米宽的纸张。

    $dompdf->set_paper(array(0,0,204,650));
    
  2. 设置DPI

    $dompdf->set_option('dpi', 72);
    
  3. 如果您要使用表格进行布局,那么您应该继续使用表格元素。使用表格显示类型设置DIV样式只会使它们像表格元素一样对待。你所拥有的将会很好,但是如果你只是使用表格元素,你会更清楚。

  4. 知道Dompdf与表有点古怪。要记住的一件事是,Dompdf不允许表格单元格小于包含的内容(对于正常流动的内容)。

  5. 很难对打印机切断内容的原因提供任何意见。我建议清理你的代码。我只是注意到你有两次相同的内容,一次是DIV被设置为表元素而第二次是实际表。

答案 1 :(得分:-1)

这个好像是驱动的问题,可以去官网解决:https://posguy.pro/en/support