wenkebilly 2023-08-19 20:25 采纳率: 80%
浏览 6
已结题

PHPWord修改模板部分变量不能显示

随机产生字符串,用phpword修改模板,$airlinePnr和$iePnr两处是空的,而其他的值显示是正常的,请问是什么原因?
代码如下:

<?php

function pnrGenerate() {
    $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';

    for ($i = 0; $i < 6; $i++) {
        $index = rand(0, strlen($characters) - 1);
        $randomString .= $characters[$index];
    }
    echo $randomString;
}

// Importing the required dependencies
require_once 'vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;

// Set the path for the PDF renderer library
$rendererLibraryPath = realpath(__DIR__ . '/vendor/mpdf/mpdf');
// var_dump($rendererLibraryPath);  //返回 bool(false),命令行 composer require mpdf/mpdf
\PhpOffice\PhpWord\Settings::setPdfRendererPath($rendererLibraryPath);
\PhpOffice\PhpWord\Settings::setPdfRendererName('MPDF');

$passportNo = ‘EK3478566’;
$name = 'XUE/XING';
$title = 'MR';

$airlinePnr = pnrGenerate();
$iePnr = pnrGenerate();
echo $airlinePnr. '</br>';
echo $iePnr. '</br>';

$etkt = mt_rand(1000000000, 9999999999);
echo $etkt. '</br>';

$date = date('dMY');
$date = str_replace('20', '', $date);
$date = strtoupper($date);
echo $date. '</br>';

// Load the template file in DOCX format
// $template = IOFactory::load('template1.docx');
$template = new TemplateProcessor('template1.docx');

// Replace the placehoders in the template file with the extracted information
$template->setValue('AIRLINEPNR', $airlinePnr);
$template->setValue('IEPNR', $iePnr);
$template->setValue('NAME', $name);
$template->setValue('TITLE', $title);
$template->setValue('ETKT', $etkt);
$template->setValue('PASSPORTNO', $passportNo);
$template->setValue('DATE', $date);

// Create a new PDF writer
// $xmlWriter = IOFactory::createWriter($template, 'PDF');
// Save the PDF file
// $xmlWriter->save('document.pdf');

// Save the filled template as a new file in DOCX format
$template->saveAs('output.docx');

?>

模板文件内容如下:

img

成品文件内容如下:

img

  • 写回答

4条回答 默认 最新

  • 2301_79233340 2023-08-19 21:19
    关注

    引用chatgpt内容作答:
    从您提供的代码和问题描述中,我看不出明显的错误。不过,我注意到您的pnrGenerate()函数在生成随机字符串时直接输出了字符串,这可能会导致问题。pnrGenerate()函数应该返回生成的随机字符串,而不是直接输出。在模板中替换变量时,您需要确保替换的值是正确的并且在正确的位置。

    以下是您的代码的修改版本,将pnrGenerate()函数修改为返回随机字符串,而不是直接输出:

    <?php
     
    function pnrGenerate() {
        $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $randomString = '';
     
        for ($i = 0; $i < 6; $i++) {
            $index = rand(0, strlen($characters) - 1);
            $randomString .= $characters[$index];
        }
        return $randomString;
    }
     
    // Importing the required dependencies
    require_once 'vendor/autoload.php';
     
    use PhpOffice\PhpWord\TemplateProcessor;
     
    $passportNo = 'EK3478566';
    $name = 'XUE/XING';
    $title = 'MR';
     
    $airlinePnr = pnrGenerate();
    $iePnr = pnrGenerate();
    echo $airlinePnr. '</br>';
    echo $iePnr. '</br>';
     
    $etkt = mt_rand(1000000000, 9999999999);
    echo $etkt. '</br>';
     
    $date = date('dMY');
    $date = str_replace('20', '', $date);
    $date = strtoupper($date);
    echo $date. '</br>';
     
    $template = new TemplateProcessor('template1.docx');
     
    $template->setValue('AIRLINEPNR', $airlinePnr);
    $template->setValue('IEPNR', $iePnr);
    $template->setValue('NAME', $name);
    $template->setValue('TITLE', $title);
    $template->setValue('ETKT', $etkt);
    $template->setValue('PASSPORTNO', $passportNo);
    $template->setValue('DATE', $date);
     
    $template->saveAs('output.docx');
     
    ?>
    

    请确保您的模板文件(template1.docx)中存在匹配的标签,例如AIRLINEPNR和IEPNR,并且这些标签的大小写和拼写与代码中的替换值一致。如果问题仍然存在,您可以添加一些调试输出来检查代码中的变量值以及模板中的标签是否匹配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 赞助了问题酬金15元 8月19日
  • 创建了问题 8月19日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000