【问题标题】:can pdf file be generated from data in db in yii可以从yii中的db中的数据生成pdf文件吗
【发布时间】:2014-02-28 15:35:52
【问题描述】:

任何人都可以指导我。我不知道我该如何继续。问题是我有描述,图像作为表 1 的字段 userA 登录后,userA 使用 decitpion 和 image 字段创建此记录我想生成一个带有图像和描述的 pdf 文件以及提供用户B登录下载pdf文件时的下载链接。

我想知道是否可以使用 yii 从 db am 中的数据生成 pdf 文件

我的问题如下

有可能吗? 如果不是,有什么更好的建议? 如果可能的话,是他们的任何扩展。 谁能提供一些指导。

请让我知道我是第一次这样做,但不确定如何继续

【问题讨论】:

    标签: pdf yii


    【解决方案1】:

    有可能是的。我不使用扩展我使用一个名为 HTML2PDF 的库 http://www.html2pdf.fr/en 我把它放在我的扩展文件夹中。 我创建了一个包含此代码的 pdf 操作

    <?php
    
    class Pdf extends CAction {
    
        public function run() {
            $controller = $this->getController();
    
            \Yii::import('core.extensions.Html2Pdf.HTML2PDF');
            //use the existing filters
    
            $model_name = $controller->modelName();
            $model = new $model_name('search');
            $dataProvider = $model->active()->search();
            //remove the pagination
            $dataProvider->setPagination(false);
    
            //get the html to transform
            $content = $controller->renderPartial('pdf',array(
                'dataProvider'=>$dataProvider,
                'title'=>$controller->modelName() . ' - '.date('F j, Y, G:i'),
            ), true);
            try
            {
                if(isset($_GET['test'])) {
                    echo $content;
                } else {
                    //create the PDF
                    $html2pdf = new HTML2PDF('P', 'A4', 'en');
                    $html2pdf->setDefaultFont('Arial');
                    $html2pdf->writeHTML($content, isset($_GET['vuehtml']));
                    $html2pdf->Output($controller->modelName() . '_'.date('Y-m-d').'.pdf');
                }
            }
            catch(HTML2PDF_exception $e) {
                echo $e;
                exit;
            }
        }
    }
    

    我可以像这样连接到任何控制器

    /**
     * @return array actions to be mapped to this controller
     */
    public function actions(){
       return array(
            'csv'=>array(
              'class'=>'core.components.actions.Csv',
              'field_list'=>array('t.id', 't.name', 't.status'),
            ),
            'pdf'=>array(
              'class'=>'core.components.actions.Pdf',
            ),
        );
    }
    

    。有一个名为 pdf 的视图,其中包含我想要导出为 PDF 的内容。我实际上是在创建简单的 HTML(所以没有什么很复杂的,而且大多数样式都是内联的)。一个例子是

    <page backtop="22mm" backbottom="8mm" backleft="0" backright="0">
        <page_header>
            <h1>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $title?></h1>
            <table backleft="10mm" style="width: 700px;" align="center">
                <tr>
                    <td style="width: 10%; border-bottom: 1px solid black;">ID</td>
                    <td style="width: 75%; border-bottom: 1px solid black;">Name</td>
                    <td style="width: 15%; border-bottom: 1px solid black;">Status</td>
                </tr>
            </table>
        </page_header>
        <page_footer>
            <table style="width: 700px; border-top: 1px solid black;" align="center">
                <tr>
                    <td style="text-align: left; width: 50%"></td>
                    <td style="text-align: right; width: 50%">page [[page_cu]]/[[page_nb]]</td>
                </tr>
            </table>
        </page_footer>    
        <table style="width: 700px;" align="center">
    
    <?php 
        foreach($dataProvider->getData() as $record) {
    ?>      <tr>
                <td style="width: 10%;"><?php echo $record->id?></td>
                <td style="width: 75%;"><?php echo $record->name?></td>
                <td style="width: 15%;"><?php echo ucfirst($record->status)?></td>
            </tr>
    
    <?php 
        }
    ?>  </table>
    </page>
    

    【讨论】:

    • 谢谢 :) mihai 的快速回复我有一个问题,即我如何提供下载链接来下载这个 pdf,这里的 pdf 存储在哪里,我需要的是当记录生成为记录的 pdf,即要存储在文件夹中的描述和 img 以及对文件夹中 pdf 文件的引用,即为每条记录提供唯一的文件名,或者你能建议我什么更好
    • 这一行$html2pdf-&gt;Output($controller-&gt;modelName() . '_'.date('Y-m-d').'.pdf'); 允许您直接下载文件。将其更改为 $html2pdf-&gt;Output('directory/file_xxxx.pdf', 'F'); 以将其保存在服务器上。要创建一个唯一的名称,您可以在 php 中创建一个哈希字符串并将其用作其名称。将其保存在便于下载的位置,并在需要时提供给用户。
    • 您的代码比我寻找的其他扩展更有价值。我已将 pdf 类放置在模型文件夹中,并将函数操作()放置在我的控制器(A)和 pdf 视图之一中,我已放置在控制器(A)的视图(A)中。我知道会出错。我在这里遇到错误,因为 core.components.actions.Pdf 将它指向现有目录。我认为我将代码放在错误的位置,请您指导我
    • 不要只是复制粘贴我的代码,而是根据您的需要进行更改和调整。与普通的 yii 相比,我有另一个应用程序结构,因为它更适合我的需求。可能你没有这个core.components.actions.Pdf,改成你的文件夹结构就好了。
    • 所以我应该把它放在项目组件文件夹中吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2011-05-26
    • 1970-01-01
    • 2014-09-08
    • 2020-03-26
    相关资源
    最近更新 更多