You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pdfmerger合并预览PDF时移动端显示异常的问题排查求助

问题描述

使用Pdfmerger进行文档预览与合并,PC/笔记本电脑显示正常,但移动端预览时会显示错误文档。以下是相关代码,请排查修复以实现多端预览效果一致。

iframe代码

<iframe  src="<?= base_url('pdfjs/web/viewer.html?file=/') ?><?= base_url('my_ctrl/my_func/'.$my_var) ?>" frameborder="0" width='100%' style="height:100vh !important" allowfullscreen webkitallowfullscreen></iframe>

控制器代码

$this->load->library('pdfmerger');
$pdfx = new Pdfmerger;
ob_clean();
ob_end_flush();
ob_end_clean();

$pdfx->addPDF('uploads/merge/'.$waktu.'.pdf', 'all');

$output2 = $this->pdf102->load_view_new('my_folder1/my_folder2/pdf/my_view', $data);

usleep(2000);
$waktu2 = date("YmdHis");
$t2 = microtime(true);
$micro2=explode(".",$t2);
$waktu2=$waktu2.$micro2[0].$micro2[1];
$nama2='uploads/merge/'.$waktu2.'.pdf';
file_put_contents($nama2, $output2);      

ob_clean();
ob_end_flush();
ob_end_clean();
$pdfx->addPDF('uploads/merge/'.$waktu2.'.pdf', 'all');

foreach($data['file'] as $filenya){
    ob_clean();
    ob_end_flush();
    ob_end_clean();

    $cekpdf=strpos($filenya['ALAMAT'],".pdf");
    if($cekpdf!==false){
        $pdfx->addPDF('uploads/global-init/plugins-init/jquery-file-upload/server/php/files/'.$var, 'all');
    }
    else{

    }

}
usleep(2000);
$waktuz = date("YmdHis");
$tz = microtime(true);
$microz=explode(".",$tz);
$waktuz=$waktuz.$microz[0].$microz[1];
$tempat='uploads/merge/'.$waktuz.'.pdf';

ob_clean();
ob_end_flush();
ob_end_clean();

$pdfx->merge('browser', base_url('uploads/merge/'.$waktuz.'.pdf'));
unlink('uploads/merge/'.$waktu.'.pdf');

exit(0);
排查修复要点
  • URL拼接错误:iframe的src拼接后会生成重复域名的URL(如http://xxx.com/pdfjs/...?file=/http://xxx.com/my_ctrl/...),移动端解析这类URL易出错。正确拼接需用urlencode处理参数:

    <iframe src="<?= base_url('pdfjs/web/viewer.html?file=' . urlencode(base_url('my_ctrl/my_func/'.$my_var))) ?>" frameborder="0" width='100%' style="height:100vh !important" allowfullscreen webkitallowfullscreen></iframe>
    
  • 缓存清理逻辑混乱:控制器中反复调用ob_clean()、ob_end_flush()、ob_end_clean(),可能导致PDF输出不完整。只需在合并输出前做一次缓存清理:

    ob_start();
    // 合并PDF逻辑
    ob_end_clean();
    
  • 临时文件名生成异常:通过拆分microtime生成文件名的方式易出现格式问题,改用uniqid生成唯一文件名更可靠:

    $waktu2 = uniqid('merge_', true);
    $nama2 = 'uploads/merge/' . $waktu2 . '.pdf';
    
  • PDF合并输出逻辑错误:$pdfx->merge('browser', base_url(...))用法错误,browser模式下无需传URL,直接输出即可;若需先保存文件再输出,按以下方式处理:

    // 方式1:直接输出到浏览器
    $pdfx->merge('browser');
    
    // 方式2:保存文件后输出内容
    $pdfx->merge('file', $tempat);
    header('Content-Type: application/pdf');
    readfile($tempat);
    
  • 临时文件残留:仅删除了单个临时文件,未清理$nama2和$tempat对应的文件,可能导致旧文件被移动端缓存显示错误,需补充清理:

    unlink($nama2);
    unlink($tempat);
    unlink('uploads/merge/'.$waktu.'.pdf');
    

内容的提问来源于stack exchange,提问作者Deka Pramesta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:23:19