使用mPDF打印预印表单后续打印偏移问题(Epson LQ-690)
问题
使用mPDF生成与预印表单对齐的销售发票PDF,重置打印机后首次打印对齐精准,但再次打印同一或其他销售发票时,打印内容出现偏移,与预印表单无法对齐。所有发票的PDF打印预览均正确且一致,但每页打印的对齐情况都不同。采用的是210mm×290mm的自定义纸张尺寸,打印机为Epson LQ-690针式打印机。请问该问题是由mPDF代码导致还是打印机硬件问题?应如何解决以确保所有打印的对齐一致性?
使用的mPDF设置代码:
$mpdf = new \Mpdf\Mpdf([ 'margin_header' => 0, 'margin_footer' => 0, 'margin_top' => 0, 'margin_left' => 0, 'margin_right' => 0, 'margin_bottom' => 0, 'format' => [210, 290], // Custom page size in mm (width, height) 'default_font' => 'Myriad Pro', 'default_font_size' => 10, 'keep_table_proportions' => true, 'autoPageBreak' => true, 'shrink_tables_to_fit' => 1, 'SetAutoPageBreak' => true, 'setAutoTopMargin' => 'stretch', 'setAutoBottomMargin' => 'stretch', 'adjust_font_disparity' => true, ]); // Additional settings to ensure consistent margins $mpdf->SetMargins(0, 0, 0); $mpdf->SetAutoPageBreak(true, 0); $mpdf->SetDisplayMode('fullpage'); $mpdf->SetHTMLHeaderByName('Header'); $mpdf->SetHTMLFooterByName('Footer'); $mpdf->SetTitle('INVOICE'); $mpdf->SetSubject('INVOICE'); $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; $mpdf->WriteHTML($htmlContent); $mpdf->SetHTMLFooterByName('Footer'); ob_clean(); $mpdf->Output();
分析与解决方案
问题根源判断
大概率不是mPDF代码问题——预览一致、首次打印正常,说明PDF文件本身的尺寸和内容定位没有问题,后续打印偏移的核心原因集中在打印机的纸张定位逻辑、缓存或驱动设置上。
一、打印机端核心修复步骤
- 锁定自定义纸张尺寸:在打印机驱动中,将210×290mm的自定义尺寸设为默认纸张,确保每次打印都调用该尺寸,避免打印机自动匹配相近标准纸(如A4)导致偏移。
- 微调物理进纸定位:Epson LQ-690机身带有进纸调节杆,可根据打印偏移方向(左/右、上/下)微调进纸位置,多次打印测试页直到对齐稳定。
- 清空打印机缓存:重启打印机或清除打印队列中的所有任务,避免旧的纸张设置缓存干扰新打印任务。
- 更新打印机驱动:前往Epson官网下载安装LQ-690的最新驱动,旧驱动可能存在自定义纸张尺寸的兼容性BUG。
二、mPDF代码优化(辅助保障)
虽然代码不是问题核心,但可调整参数消除潜在隐患:
- 移除重复设置:代码中重复定义了
autoPageBreak相关参数,保留一处即可,避免冲突:$mpdf = new \Mpdf\Mpdf([ // ...其他参数 'autoPageBreak' => true, 'autoPageBreakMargin' => 0, // 直接在这里设置页边距,替代后续的SetAutoPageBreak // ...其他参数 ]); // 删除后续重复的$mpdf->SetAutoPageBreak(true, 0); - 禁用自动边距拉伸:
setAutoTopMargin和setAutoBottomMargin设为'stretch'可能导致打印时内容被自动调整,改为固定值:'setAutoTopMargin' => 'pad', 'setAutoBottomMargin' => 'pad', - 明确输出参数:输出时指定文件类型,确保PDF尺寸信息被正确传递给打印机:
$mpdf->Output('invoice.pdf', 'I');
三、打印流程规范
- 每次打印前手动确认打印对话框中的纸张尺寸为自定义的210×290mm,不要依赖默认设置。
- 切换打印不同尺寸纸张时,清空打印机内的剩余纸张,重新装入预印表单,避免进纸传感器误判。
内容的提问来源于stack exchange,提问作者KL Codes
相关产品推荐
相关产品推荐

