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




