【问题标题】:How do I get domPDF to display my codeigniter view correctly如何让 domPDF 正确显示我的 codeigniter 视图
【发布时间】:2013-08-02 16:09:32
【问题描述】:

我觉得我遗漏了一小步,显然其他相关问题的每个人都理解。

我创建了一个简单的 CI 2 视图、控制器和模型,如下所示:

我已将 dompdf 安装到 helpers 文件夹中,如下所示:

applications/helpers/dompdf

applications/helpers/dompdf/dompdf_help.php

我想要发生的是当用户单击视图页面上的提交按钮,将表单数据发送到数据库,然后获取该表单的 pdf。

在出现未定义的 var 错误或什么都没有出现之间,除了数据进入 db,我看不到我缺少什么。

有人可以指导我吗?我在这里没有得到什么?

查看

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>test pdf</title>
    </head>
    <body>
<?php // Change the css classes to suit your needs    

$attributes = array('class' => '', 'id' => '');
echo form_open('quicksubmit', $attributes); ?>

<p>
        <label for="title">Title <span class="required">*</span></label>
        <?php echo form_error('title'); ?>

        <?php // Change the values in this array to populate your dropdown as required ?>
        <?php $options = array(
                    ''  => 'Please Select',
                    'Mrs'    => 'Mrs',
                    'Miss'    => 'Miss',
                    'Ms'    => 'Ms',
                    'Mr'    => 'Mr',
                  ); ?>

        <br /><?php echo form_dropdown('title', $options, set_value('title'))?>
</p>                                             

<p>
        <label for="first_name">First Name</label>
        <?php echo form_error('first_name'); ?>
        <br /><input id="first_name" type="text" name="first_name" maxlength="100" value="<?php echo set_value('first_name'); ?>"  />
</p>

<p>
        <label for="last_name">Last Name <span class="required">*</span></label>
        <?php echo form_error('last_name'); ?>
        <br /><input id="last_name" type="text" name="last_name" maxlength="100" value="<?php echo set_value('last_name'); ?>"  />
</p>

<p>
        <label for="branch">Branch</label>
        <?php echo form_error('branch'); ?>

        <?php // Change the values in this array to populate your dropdown as required ?>
        <?php $options = array(
                    ''  => 'Please Select',
                    'Branch 1'    => 'Branch One',
                    'Branch 2'    => 'Branch Two',
                  ); ?>

        <br /><?php echo form_dropdown('branch', $options, set_value('branch'))?>
</p>                                             

<p>
        <label for="zip">Zip</label>
        <?php echo form_error('zip'); ?>
        <br /><input id="zip" type="text" name="zip" maxlength="7" value="<?php echo set_value('zip'); ?>"  />
</p>


<p>
        <?php echo form_submit( 'submit', 'Submit'); ?>
</p>

<?php echo form_close(); ?>

    </body>
</html>

控制器

<?php

class Quicksubmit extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->database();
        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->model('quicksubmit_model');
    }   
    function index()
    {           
        $this->form_validation->set_rules('title', 'Title', 'required|trim|xss_clean|max_length[50]');          
        $this->form_validation->set_rules('first_name', 'First Name', 'trim|xss_clean|max_length[100]');            
        $this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|xss_clean|max_length[100]');         
        $this->form_validation->set_rules('branch', 'Branch', 'trim|xss_clean|max_length[100]');            
        $this->form_validation->set_rules('zip', 'Zip', 'trim|xss_clean|is_numeric|max_length[7]');

        $this->form_validation->set_error_delimiters('<br /><span class="error">', '</span>');

        if ($this->form_validation->run() == FALSE) // validation hasn't been passed
        {
            $this->load->view('quicksubmit_view');
        }
        else // passed validation proceed to post success logic
        {
            // build array for the model
                    $this->pdf($output);

                        $form_data = array(
                                    'title' => set_value('title'),
                                    'first_name' => set_value('first_name'),
                                    'last_name' => set_value('last_name'),
                                    'branch' => set_value('branch'),
                                    'zip' => set_value('zip')
                                    );

            // run insert model to write data to db

            if ($this->quicksubmit_model->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db
            {
                redirect('quicksubmit/success');   // or whatever logic needs to occur
            }
            else
            {
            echo 'An error occurred saving your information. Please try again later';
            // Or whatever error handling is necessary
            }
        }
    }
    function success()
    {
            redirect(base_url(),'refresh');     
            /*echo 'this form has been successfully submitted with all validation being passed. All messages or logic here. Please note
            sessions have not been used and would need to be added in to suit your app';*/
    }
        function pdf()
            {
                 $this->load->helper(array('dompdf', 'file'));
                 // page info here, db calls, etc.     
                 $html = $this->load->view('quicksubmit_view', $data, true);
                 pdf_create($html, 'filename');
                 /*or
                 $data = pdf_create($html, '', false);
                 write_file('name', $data);*/
                 //if you want to write it to disk and/or send it as an attachment    
            }
}
?>

型号

<?php

class Quicksubmit_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    // --------------------------------------------------------------------

      /** 
       * function SaveForm()
       *
       * insert form data
       * @param $form_data - array
       * @return Bool - TRUE or FALSE
       */

    function SaveForm($form_data)
    {
        $this->db->insert('quicksubmit', $form_data);

        if ($this->db->affected_rows() == '1')
        {
            return TRUE;
        }

        return FALSE;
    }
}
?>

dompdf_help.php 文件

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

function pdf_create($html, $filename='', $stream=TRUE) 
{
    require_once("dompdf/dompdf_config.inc.php");

        $dompdf = new DOMPDF();
        $dompdf->load_html($html);
        $dompdf->render();
        if ($stream) {
            $dompdf->stream($filename.".pdf");
        } else {
            return $dompdf->output();
        }
}
?>

【问题讨论】:

  • 我不是 CI 的用户,所以请原谅我的无知。您调用 $this-&gt;pdf($output) 但不设置 $output 并且 pdf 方法不接受任何参数。只是一个代码清洁点。在pdf 方法中,您加载一个视图,将$data 变量传递给它。该变量是由 CI 设置的,因为它没有在我能看到的其他任何地方定义吗?您可能希望删除不需要的所有内容以简化代码并解决错误(您应该在此处发布,因为它们可能相关)。

标签: codeigniter-2 dompdf


【解决方案1】:

你快到了!

将dompdf存放在third_party文件夹中可能会更好,它不是code igniter helper。 - 查看我在构造函数中存储它的路径。然后它总是可用的。

另外,最好在模型中完成程序的“工作”,因此这包括制作 PDF 等。

  • 不要在代码末尾使用 ?>。

我修改了您的代码以使其正常工作,并验证它确实有效。它只是保存一个名为 tmp/name.pdf 的文件。我相信你可以解决剩下的问题。我确实注释掉了数据库加载器,因为我不需要它来测试代码。

见文。

<?php

 class Quicksubmit extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library('form_validation');
    //$this->load->database();
    $this->load->helper('form');
    $this->load->helper('url');
    $this->load->helper('file');
    $this->load->model('quicksubmit_model');

    global $_dompdf_show_warnings;global $_dompdf_debug;global $_DOMPDF_DEBUG_TYPES;global $_dompdf_warnings;$_dompdf_show_warnings = FALSE;
    require_once(realpath(APPPATH."third_party/dompdf")."/dompdf_config.inc.php"); // remember that the constant DOMPDF_TEMP_DIR may need to be changed.
    spl_autoload_register('DOMPDF_autoload');
}   
function index()
{           
    $this->form_validation->set_rules('title', 'Title', 'required|trim|xss_clean|max_length[50]');          
    $this->form_validation->set_rules('first_name', 'First Name', 'trim|xss_clean|max_length[100]');            
    $this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|xss_clean|max_length[100]');         
    $this->form_validation->set_rules('branch', 'Branch', 'trim|xss_clean|max_length[100]');            
    $this->form_validation->set_rules('zip', 'Zip', 'trim|xss_clean|is_numeric|max_length[7]');

    $this->form_validation->set_error_delimiters('<br /><span class="error">', '</span>');

    if ($this->form_validation->run() == FALSE) // validation hasn't been passed
    {
        $this->load->view('quicksubmit_view');
    }
    else // passed validation proceed to post success logic
    {
        // build array for the model


        $form_data = array(
                    'title' => set_value('title'),
                    'first_name' => set_value('first_name'),
                    'last_name' => set_value('last_name'),
                    'branch' => set_value('branch'),
                    'zip' => set_value('zip')
                    );
        $this->pdf($form_data);
        // run insert model to write data to db

        if ($this->quicksubmit_model->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db
        {
            redirect('quicksubmit/success');   // or whatever logic needs to occur
        }
        else
        {
            echo 'An error occurred saving your information. Please try again later';
        // Or whatever error handling is necessary
        }
    }
}
function success()
{
        redirect(base_url(),'refresh');     
        /*echo 'this form has been successfully submitted with all validation being passed. All messages or logic here. Please note
        sessions have not been used and would need to be added in to suit your app';*/
}
function pdf($data)
{
    $dompdf = new DOMPDF();
    $html = $this->load->view('quicksubmit_view', $data, true);
    $dompdf->set_paper('a4','portrait');
    $dompdf->load_html($html);
    $dompdf->render();
    $pdf = $dompdf->output();
    write_file('tmp/name.pdf', $pdf);

}
}

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多