0

我正在使用 dompdf 生成 pdf 格式的收据,然后使用RP327 80mm Thermal Receipt Printer 打印。但是打印的收据不适合纸张。这是打印收据pos 收据的附加图像。这是我的 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));
<?>
4

2 回答 2

1

根据链接的打印机规格,打印机能够打印到 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 不允许表格单元格小于包含的内容(对于正常流动的内容)。


很难就打印机切断内容的原因提供任何意见。我建议清理你的代码。我刚刚注意到您有两次相同的内容,一次是作为表格元素样式的 DIV,第二次作为实际表格。

于 2017-01-11T23:31:22.120 回答
-1

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

于 2021-06-27T23:10:14.470 回答