2017-02-17 6 views
4

Я использую пакет wkhtmltopdf для преобразования моей html-страницы в файл .pdf. Я хочу использовать это, чтобы клиенты могли распечатать контент на бумаге с меткой, изъятой 3 х 7. Точный размер этикетки - 70 х 42,3 мм. Проблема в том, что я не могу получить правильное определение размера.Symfony print label в формате a4

Я использовал css с плавающей запятой и шириной 33%, чтобы получить 3 столбца, и теперь я пытаюсь получить 7 строк. Я думал, что его разделение на 14,2% (7 рядов) сделало бы трюк. Однако после этого будет напечатано только 1 метка. Когда я удаляю высоту, он будет печатать все метки, но более 7 на страницу. Кто-нибудь поможет мне разобраться, как получить формат 3x7 a4 для ярлыков?

{% set labels = 1 %} 

{% block body %} 
    {% for sale in webstore.getSales %} 
     {% for orderItem in sale.getOrderItems %} 
      {% if labels == 21 %} 

     <div style="page-break-after: before;" class="newPage"></div> 
      {% set labels = 1 %} 
      <br> 
     </div> 
     {%endif%} 
     <div class="stickerWidth" id="stickerWidth" > 
      <div class="text"> 
       <div >{{sale.getWebstoreOrderId}} : <span style="float:right; margin-right:5px; font-size:20px" > {{sale.getDate.date | date("d/m/Y")}}</span> </div> <br><br> 
       <div style=" text-align:center;font-size: 24px;">{{orderItem.getAmount}} x {{orderItem.getItemName}}</div> <br> 
        <div> 
        {% if webstore.name %} 
         <span style="font-size:20px"> 
         {{webstore.id}}<br> 
         {{webstore.name}}</span> 
        {% endif %} 

       </div> 
      </div> 

     </div> 
    {% set labels = labels + 1 %} 
    {% endfor %} 
{% endfor %} 

{% endblock %} 

{% block styleSheets%} 
    <link rel="stylesheet" href="{{ base_dir ~ asset('css/main.css') }}"> 
    <style> 
     .newPage { 
      page-break-after: always; 
      page-break-inside: avoid; 
     } 
     .stickerWidth{ 
      height: 180px; 
      width: 33%; 
      float: left; 
      background-color: green;    
     } 

     .text{ 
      background-color: red; 
      margin-right: 5px; 
      margin-top: 5px; 
      margin-top: 5px; 
     } 
    </style> 
{% endblock %} 

EDIT: Добавлен последний код, используемые метки для подсчета, если я достигну 21, то новой страницы

enter image description here

ответ

1

Быстрым решения здесь: Чтобы создать новую страницу каждые 21 этикеток:

{% for orderItem in sale.getOrderItems %} 
    {% if (loop.index % (7*3) == 0) %} 
     <div class="newPage"></div> 
    {% endif %} 
    {# ... #} 

CSS:

.newPage { 
    page-break-before:always 
} 

Моя собственная реализация: Контроллер:

public function export() { 
    $html = $this->get('yourPDFservice')->getHtml($someParams); 

    //echo $html;exit; // use that to debug your html 

    $snappyPdf = $this->getLibExportPDF(); 

    return new Response(
     $snappyPdf->getOutputFromHtml($html), 
     200, 
     array(
      'Content-Type'   => 'application/pdf', 
      'Content-Disposition' => 'attachment; filename="filename.pdf"' 
     ) 
    ); 

private function getLibExportPDF() { 
    $snappyPdf = $this->get('knp_snappy.pdf'); 

    $snappyPdf->setOption('page-size', 'A4');// 21x29.7 cm 
    $snappyPdf->setOption('zoom', 1); 
    $snappyPdf->setOption('dpi', 300);// 21x29.7 (300dpi) 

    return $snappyPdf; 
} 

HTML-:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<style> 
.nobreak { 
    page-break-inside:avoid; 
} 
.newPage { 
    page-break-before:always; 
} 
</style> 

</head> 
<body> 
    {# Your html code here #} 
</body> 
</html> 
+0

Я попробовал его и не получил никаких ошибок, но я до сих пор не получить 2-ю страницу. по какой-то причине pdf придерживается одной страницы и отказывается создать второй – KevinTheGreat

+0

извините за поздний отклик, stackoverflow опущен – KevinTheGreat

+0

Я поместил весь свой код html-файла, который будет преобразован в мой вопрос – KevinTheGreat