问题描述
我正在使用一个根据项目的位置(条形码看起来像L001-01-01)打印条形码的系统。在表格中,您可以选择顶层位置,货架和托架(条形码中的数字按相应顺序排列)。提交表单后,我需要做两件事:
这是一些代码的样子:
<!-- 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['bay']) . "-" . $_POST['user'] . ".pdf",'F');
$link = "sampleURL/location_tags/L" . sprintf("%03d",$_POST['bay']) . "-" . $_POST['user'] . ".pdf";
echo "<iframe id='iframe' src='" . $link . "' onload='barcode_print()'></iframe>";
$mpdf->Output("L" . sprintf("%03d",'D');
}
?>
这是此操作的简要介绍:提交表单后,我使用mPDF库创建了PDF,其中包含来自表单的信息,格式正确,可以通过条形码扫描仪进行打印和扫描。 if
语句的最后四行在这里真正重要:
$mpdf->Output("sampleURL/location_tags/L" . sprintf("%03d",'F');
上面的行将PDF输出到Web服务器上的文件。然后,我可以在其他页面上使用该URL来打印相同的条形码。
$link = "sampleURL/location_tags/L" . sprintf("%03d",$_POST['bay']) . "-" . $_POST['user'] . ".pdf";
echo "<iframe id='iframe' src='" . $link . "' onload='barcode_print()'></iframe>";
以上两行使用的是刚刚保存PDF的URL,然后回显iframe。加载后,将调用javascript函数,以打开打印对话框。
$mpdf->Output("L" . sprintf("%03d",'D');
最后,将下载相同的PDF文件。这是一种创可贴的解决方法,因为mPDF库会在文件输出后立即尝试打开该文件(我不希望这样做)。通过下载PDF,它也不会尝试打开保存到服务器的文件。即使浏览该库的文档,我也找不到找到输出到文件的方法,并且不在同一浏览器选项卡中打开文件。
我知道此代码可以单独工作-PDF正确创建。如果我在另一个网页上调用iframe代码来打印已经存在的PDF,它也可以按需运行,但是我需要在提交表单后立即在同一页面上创建和打印PDF。问题似乎是,一旦输出PDF,PHP就会停止运行,并且不会回显iframe。任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)