使用FuelPHP预览PDF文件

时间:2014-04-22 14:48:26

标签: php pdf fuelphp

我正在尝试使用<object><embed>标签显示在FuelPHP中上传的PDF文件。

注意:如果你转到页面,/ upload / image?image_id = 1会下载正确的pdf。但是当它嵌入我的浏览器时,它是不可见的。我使用的是最新版本的Chrome版本34.0.1847.116

另一个注意事项是,如果pdf位于htdocs文件夹中,预览也会显示正常。此外,我使用这种下载方法来显示图像,它与<img src="/upload/image?image_id=some_num">

一起正常工作

这是我的Rest Controller ..

<?php
class Controller_Upload extends Controller_Rest
{

    public function after($response) {
        parent::after($response);       
        return $this->response(json_encode($this->data));
    }

    public function get_image()
    {
        $image_id = Input::post("image_id");
        $file_name = (Input::get('image_name') != null) ? Input::get('image_name') : Model_Db_Storage::get_image($this->userid, $image_id);

        if($file_name)
        {
            $this->response->set_header('Content-Type', 'application/pdf');
            File::download(APPPATH.'/tmp/'.$file_name);
        }
        else
        {
            $this->data['image'] = $file_name;
            $this->data['response'] = 'Error Receipt not Found';
        }
    }
}
?>

HTML:

<object data="/upload/image?image_id=1" type="application/pdf">
    <embed src="/upload/image?image_id=1" type="application/pdf" />
</object>

2 个答案:

答案 0 :(得分:0)

这似乎更像是一个HTML问题,而不是一个实际的FuelPHP问题,因为你说在浏览器中直接查看PDF时它是有效的。

我认为您最好使用iframe代码。

请参阅此question and answer

请看Mozilla's docs on iFrame

简单的例子是:

<iframe width="400" height="215" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="/upload/image?image_id=some_num"></iframe>

答案 1 :(得分:0)

这是我通过决定输出原始字节而想出的解决方案。

我将HTMl代码更改为iframe而不是

<iframe src="/upload/image?image_id=1"></iframe>

然后我改变了输出文件的方式:

$this->response->set_header('Content-Type', 'application/pdf');
//File::download(APPPATH.'/tmp/'.$file_name);
echo File::read(APPPATH.'/tmp/'.$file_name);
return new Response();