Symfony 打印 a4 格式的标签
Symfony printing label on a4 format
我正在使用 wkhtmltopdf 包将我的 html 页面转换为 .pdf 文件。我想使用它,以便客户可以在 3 x 7 的标签纸上打印内容。标签的确切尺寸为 70 x 42.3 毫米。问题是,我似乎无法正确选择尺码。
我使用 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 %}
编辑:添加了最新代码,使用标签来计算我是否达到 21 然后是新页面
此处的快速解决方案:
每 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>
我正在使用 wkhtmltopdf 包将我的 html 页面转换为 .pdf 文件。我想使用它,以便客户可以在 3 x 7 的标签纸上打印内容。标签的确切尺寸为 70 x 42.3 毫米。问题是,我似乎无法正确选择尺码。
我使用 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 %}
编辑:添加了最新代码,使用标签来计算我是否达到 21 然后是新页面
此处的快速解决方案: 每 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>