You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CodeIgniter生成PDF后如何在500×500的div中显示而非全屏

解决CodeIgniter中PDF嵌入指定div容器的问题

嘿,我来帮你搞定这个问题!你当前的代码思路有个关键问题:直接在视图里混合输出HTML代码和PDF的二进制数据流,浏览器无法同时解析这两种不同类型的内容,它会优先把整个响应识别为PDF文件,自然就全屏打开了,你的div容器根本没机会被渲染出来。

下面是调整后的解决方案,核心是把PDF生成和HTML页面展示分开,用iframe来嵌入PDF内容到指定div中:

1. 修改控制器代码

新增一个专门生成PDF的方法,让它单独处理PDF的输出逻辑:

class Print_pdf extends CI_Controller {
    function __construct() {
        parent::__construct();
        $this->load->library('pdf');
    }

    function index() {
        // 只负责加载视图页面
        $this->load->view("report");
    }

    // 新增:专门生成并输出PDF的方法
    function generate_pdf() {
        $pdf = $this->pdf->load();
        $pdf->WriteHTML("<h1>hello</h1>"); // 注意你原来的标签写错了,应该是</h1>
        // 第二个参数设为'I'表示直接在浏览器内显示(inline),而不是下载
        $pdf->Output('my_report.pdf', 'I');
    }
}

2. 修改视图文件(report.php)

在div里用iframe嵌入PDF生成的接口地址,这样就能把PDF限制在指定尺寸的容器内:

<div id="d1" class="dd" style="height:500px;width:500px;overflow:auto;background:lime;color:red;">
    <!-- 用iframe加载PDF生成方法的URL,样式设置为占满整个div -->
    <iframe src="<?= base_url('print_pdf/generate_pdf') ?>" 
            style="width:100%;height:100%;border:none;"></iframe>
</div>

关键说明

  • 确保你的CodeIgniter配置文件中base_url已经正确设置,否则iframe的src会找不到资源
  • overflow:auto可以让div在PDF内容超出容器尺寸时显示滚动条,方便查看完整内容
  • 原来的HTML标签</>是错误的,要改成正确的</h1>,避免渲染异常

内容的提问来源于stack exchange,提问作者Jadav Ramesh

火山引擎 最新活动