PHP库mPDF阻止打开打印窗口

时间:2020-10-16 22:23:29

标签: javascript php html iframe mpdf

我正在使用一个根据项目的位置(条形码看起来像L001-01-01)打印条形码的系统。在表格中,您可以选择顶层位置,货架和托架(条形码中的数字按相应顺序排列)。提交表单后,我需要做两件事:

  1. 创建PDF,将数字形式的数据转换为条形码形式,并以正确的条形码字体显示

  2. 在包含<iframe>的页面上打开,然后自动打开刚刚创建的PDF的打印窗口。

这是一些代码的样子:

<!-- this creates the auto print function that executes onload of the iframe -->
<script type="text/javascript">
    function barcode_print(){
        document.getElementById('iframe').contentWindow.print();
    }
</script>

<?php
    //check if form was submitted
    if(isset($_POST['TLL']) and $_POST['TLL'] != null){
        require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins/wp-mpdf/mpdf/mpdf.php'; //include PHP library
        $mpdf = new \mPDF('utf-8', array(90,29)); //creates PDF
                    $mpdf->autoPageBreak = false;
                    $mpdf->WriteHTML($stylesheet,1); //sets stylesheet (not shown in this code)
                    $mpdf->use_kwt = true;
                    ob_clean();
                    flush();
                    header("Content-type:application/pdf");
                    $mpdf->WriteHTML("
                            <h4>*L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "*</h4>
                    ",2);
                    

                    $mpdf->Output("sampleURL/location_tags/L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf", 'F');
                    $link = "sampleURL/location_tags/L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf";
                    echo "<iframe id='iframe' src='" . $link . "' onload='barcode_print()'></iframe>";
                    $mpdf->Output("L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf", 'D');
    }
?>

这是此操作的简要介绍:提交表单后,我使用mPDF库创建了PDF,其中包含来自表单的信息,格式正确,可以通过条形码扫描仪进行打印和扫描。 if语句的最后四行在这里真正重要:

$mpdf->Output("sampleURL/location_tags/L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf", 'F');

上面的行将PDF输出到Web服务器上的文件。然后,我可以在其他页面上使用该URL来打印相同的条形码。

$link = "sampleURL/location_tags/L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf";
echo "<iframe id='iframe' src='" . $link . "' onload='barcode_print()'></iframe>";

以上两行使用的是刚刚保存PDF的URL,然后回显iframe。加载后,将调用javascript函数,以打开打印对话框。

$mpdf->Output("L" . sprintf("%03d", $_POST['TLL']) . "-" . sprintf("%02d", $_POST['shelf']) . "-" . sprintf("%02d", $_POST['bay']) . "-" . $_POST['user'] . ".pdf", 'D');

最后,将下载相同的PDF文件。这是一种创可贴的解决方法,因为mPDF库会在文件输出后立即尝试打开该文件(我不希望这样做)。通过下载PDF,它也不会尝试打开保存到服务器的文件。即使浏览该库的文档,我也找不到找到输出到文件的方法,并且在同一浏览器选项卡中打开文件。

我知道此代码可以单独工作-PDF正确创建。如果我在另一个网页上调用iframe代码来打印已经存在的PDF,它也可以按需运行,但是我需要在提交表单后立即在同一页面上创建和打印PDF。问题似乎是,一旦输出PDF,php就会停止运行,并且不会回显iframe。任何帮助将不胜感激。

0 个答案:

没有答案
相关问题