如何在 yii2 的 pdf 标题上打印字符串

Posted

技术标签:

【中文标题】如何在 yii2 的 pdf 标题上打印字符串【英文标题】:How to print a string on pdf header in yii2 【发布时间】:2018-02-14 10:23:46 【问题描述】:

我正在开发yii2 框架。我正在使用kartik\mpdf\Pdf 打印pdf 文件。有一个名为 subdivision 的字段,我想将其打印在 pdf 文件的标题上。

$sql_r = "SELECT DISTINCT ogph.`id` AS 'OGP_Serial_No',DATE(ogph.`created_at`) AS 'Date',uu.`name` AS 'Created_By',ogpd.`meter_serial` AS 'Meter_Serial_Number',  u.`name` AS 'Issued_To', ps.`name` AS 'Store',sd.`name` AS 'Sub_Division',
IFNULL(ogph.`admin_incharge`,'') AS 'Admin_Incharge', IFNULL(ogph.`project_manager`,'') AS 'Project_Manager', IFNULL(ogph.`driver_name`,'') AS 'Driver_Name', IFNULL(ogpd.`remarks`,'') AS 'Remarks'  
FROM `ogp_header` ogph
INNER JOIN `ogp_detail` ogpd ON ogph.`id` = ogpd.`ogp_id` 
INNER JOIN `user` u ON ogph.`issuer` = u.`id`  
INNER JOIN `user` uu ON ogph.`created_by` = uu.`id`
INNER JOIN `survey_hesco_subdivision` sd ON ogph.`sub_division` = sd.`sub_div_code`
INNER JOIN `project_store` ps ON ogph.`store_id` = ps.`id` $where AND ogph.`id` = $ogp_id";
        $sql_r = $sql_r . " LIMIT " . $from . " OFFSET " . $to;

        $dataProvider = new SqlDataProvider([
            'sql' => $sql_r,
            'pagination' => false
        ]);


    $content = $this->renderPartial('view_pdf_ogp', ['dataProvider' => $dataProvider]);

    $pdf = new Pdf([
        // set to use core fonts only
        'mode' => Pdf::MODE_UTF8,
        // A4 papr format
        'format' => Pdf::FORMAT_A4,
        // portrait orientation
        'orientation' => Pdf::ORIENT_PORTRAIT,
        // stream to browser inline
        'destination' => Pdf::DEST_DOWNLOAD,
        // your html content input
        'content' => $content,
        // format content from your own css file if needed or use the
        // enhanced bootstrap css built by Krajee for mPDF formatting
        'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
        // any css to be embedded if required
        'cssInline' => '.kv-heading-1font-size:14px',
        // set mPDF properties on the fly
        'options' => ['title' => 'OGP Document'],
        // call mPDF methods on the fly
        'methods' => [
            'SetHeader' => ['Name.||Generated On: ' . date("Y-m-d h:i:sa")],
            'SetFooter' => ['PAGENO']
        ]
    ]);

在上面的代码中,我想做类似'SetHeader' => ['Accurate (PVT) LTD.|Sub-Division: Here I want to print the sub division name|Generated On: ' . date("Y-m-d h:i:sa")],

我尝试了什么?

我尝试通过添加来做到这一点

'SetHeader' => ['Name.|Sub-Division: '.<?php $model=$dataProvider->getModels()[0]; print_r($model['Sub_Division'])?>.'|Generated On: ' . date("Y-m-d h:i:sa")]

还有

'SetHeader' => ['Name.|Sub-Division: '.$content->Sub_Division.'|Generated On: ' . date("Y-m-d h:i:sa")],

但是两者都给我non-object 错误。有什么方法可以将字符串放在从查询中获取的标题上?

任何帮助将不胜感激。

【问题讨论】:

您确定您的问题与 PDF 类有关吗?是否可以生成要写入标题的字符串而没有问题,或者您生成的字符串没有正确保存在PDF文件中? $content 是一个包含渲染视图的字符串。所以这个$content->Sub_Division 总是会抛出非对象错误。 为什么不使用自定义函数来获取 Sub_division 然后将其附加到您的标题中? USTAD ¯\_(ツ)_/¯ 你在这里做什么? ['Accurate (PVT) LTD.|Sub-Division: '.<?php $model=$dataProvider->getModels()[0]; print_r($model['Sub_Division'])?>.'|Generated On: ' . date("Y-m-d h:i:sa")] 【参考方案1】:
'SetHeader' => ['Accurate (PVT) LTD.|Sub-Division: '.<?php $model=$dataProvider->getModels()[0]; print_r($model['Sub_Division'])?>.'|Generated On: ' . date("Y-m-d h:i:sa")]

你想用上面的代码行实现什么,你正在设置一个数组索引SetHeader,它期望它的值是一个字符串,为什么是php标签以及为什么print_r当你只需要连接多个字符串时。像下面这样阅读。

'SetHeader' => ['header string goes here']

话虽如此,你可以通过两种方法设置标题。

方法一

在配置数组中提供标题(这是您正在尝试的方法),但您没有以正确的方式构建标题字符串。应该如下所示。

'SetHeader' => ['Accurate (PVT) LTD.|Sub-Division: '.$dataProvider->getModels()[0]['Sub_Division'].'|Generated On: ' . date("Y-m-d h:i:sa")]

以上配置表示“使用提供的参数调用mPDF 类的SetHeader 方法”。

方法二

或者,您可以获取mPDF 对象并直接调用其SetHeader 方法。

$mpdf = $pdf->api; // fetches mpdf api
$mpdf->SetHeader('Accurate (PVT) LTD.|Sub-Division: '.$dataProvider->getModels()[0]['Sub_Division'].'|Generated On: ' . date("Y-m-d h:i:sa"));

【讨论】:

以上是关于如何在 yii2 的 pdf 标题上打印字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ByteBuffer 转换为 pdf

Yii2 mpdf更改下载的文件名

Zend PDF:如何打印粗体文本或其他颜色的文本等?

Yii2:如何在 mPDF 中添加模型和模型 id

我如何在我创建的 pdf 上执行打印 [关闭]

在 Android 按钮上打印 Pdf 文件 单击