我在Kartik mPDF
内安装了Yii framework 2.0
个扩展程序。下面是我的控制器中的代码片段,它生成PDF文件并将其发送到浏览器。
// setup kartik\mpdf\Pdf component
$pdf = new Pdf([
'mode' => Pdf::MODE_CORE,
'format' => Pdf::FORMAT_A4,
'orientation' => Pdf::ORIENT_PORTRAIT,
'destination' => Pdf::DEST_BROWSER,
// your html content input
'content' => $this->renderPartial('print-barcode'),
'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
'cssInline' => '.kv-heading-1{font-size:18px}',
'options' => ['title' => 'My PDF file'],
'methods' => [
'SetHeader'=>['My header'],
'SetFooter'=>['{PAGENO}'],
]
]);
return $pdf->render();
我有两个JS文件(JsBarcode.js
和CODE128.js
),可在此处找到https://github.com/lindell/JsBarcode
要生成条形码,我需要包含这些JS文件和我的自定义JavaScript代码。在我看来,我通常包括以下文件(我的print-barcode.php
)。
<?php
$this->registerJsFile(Yii::$app->urlManager->baseUrl . '/js/JsBarcode.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
$this->registerJsFile(Yii::$app->urlManager->baseUrl . '/js/Code128.js', ['depends' => [\yii\web\JqueryAsset::className()]]);
$jsGenerateBarcode = 'My custom Javascript code goes here ...';
$this->registerJs($jsGenerateBarcode, $this::POS_END);
?>
所有包含的JavaScript代码根本没有任何效果,因为它是PDF文件而不是网页。如何打印由JsBarcode.js
和CODE128.js
生成的条形码并将其传递到由kartik\mpdf\Pdf;
生成的PDF文件?
答案 0 :(得分:1)
抱歉这么晚了,但这对我有用。您应该首先使用信息创建一个视图,然后使用 renderPartial 并将其发送到 mpdf。
我的视图包含:
<script src="<?=yii::$app->params['rootUrl']?>/js/JsBarcode.code128.min.js"></script>
<p>Safety is Everyone's Responsibility</p>
<p><barcode code="<?=$model->qrcode?>" type="C128A" class="barcode" size="0.8" /></p>
并进行测试:
return $this->renderPartial('_print-view',['model'=>$myModel]);
最后打印pdf(我正在打印徽章,所以我在玩边距):
$mpdf = new \Mpdf\Mpdf([
//'mode' => 'c'
'margin_left' => 0,
'margin_right' => 0,
'margin_top' => 0,
'margin_bottom' => 0,
'format' => [54,86],
]);
$mpdf->SetTitle('Badge: '.$myModel->badge_number);
$mpdf->WriteHTML($this->renderPartial('_print-view',['model'=>$myModel,'page'=>1]));
$mpdf->AddPage('L');
$mpdf->WriteHTML($this->renderPartial('_print-view',['model'=>$myModel,'page'=>2]));
$mpdf->Output($badge_number,'I');