【问题标题】:mPDF - PHP Script inside the html block of code to generate PDF filemPDF - 用于生成 PDF 文件的 html 代码块内的 PHP 脚本
【发布时间】:2021-02-18 13:07:20
【问题描述】:

大家好,

在脚本中如下所示,我需要在 html 代码中插入 PHP 脚本,但我在文档中没有找到任何示例来说明如何执行此操作。

这样可能吗?

我使用 Wordpres
我使用 Woocommerce
我必须打印感谢页面。在感谢页面上,我有一个按钮,我单击并下载文件。
生成 PDF 文件的 PHP 文件必须接收动态数据。
5° PHP 脚本必须包含在 html 代码中,如下所示。
当我单击按钮下载 PDF 文件时,我收到以下错误消息。

注意: 未定义变量:C:\xampppserver2\htdocs\mrdigital\wp-content\themes\astra-child\testmpdf.php 行中的顺序 >22

致命错误: 未捕获的错误:在 C:\xampppserver2\htdocs\mrdigital\wp-content\themes\astra-child\testmpdf.php 中调用成员函数 get_order_number() on null: 22 堆栈跟踪:#0 {main} 在 C:\xampppserver2\htdocs\mrdigital\wp-content\themes\astra-child\testmpdf.php22 中抛出

这是 22
$order = $_GET[$order->get_order_number()];

这是整个 testmpdf.php 文件:

<?php
/**
 * @Author: exame
 * @Last Modified time: 2020-11-05 15:47:01
 */
use Mpdf\Mpdf;

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new Mpdf();

$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);

$mpdf = new \Mpdf\Mpdf([
    'mode' => 'utf-8',    
    'orientation' => 'P',
    'format' => 'A4'
]);

$order = $_GET[$order->get_order_number()]; 
$order = $_GET[$order->get_date_created()]; 

$html = '
<div id="pdfprintcontentarea">
                    <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received">Obrigado. Seu pedido foi recebido. Enviamos o comprovante de compra por e-mail para você.</p>
            <p>Tempo de Reserva do Pedido: <b>24 horas</b> - Por favor efetue o pagamento agora antes que você perca a reserva!</p>
            <ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">

            <li class="woocommerce-order-overview__order order">
                
                <strong>$order->get_order_number();</strong>
            </li>
                            
            <li class="woocommerce-order-overview__date date">
                Hora:                   <strong>10:56:01.507644</strong>
            </li>

            <li class="woocommerce-order-overview__date date">                  
                    <strong>wc_format_datetime( $order->get_date_created() );</strong>
            </li>

                
            <li class="woocommerce-order-overview__total total">
                    Total:                  <strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">R$</span>5,00</bdi></span></strong>
            </li>

                <li class="woocommerce-order-overview__total total">
                    Status Pedido:                  <strong>Aguardando</strong>
                </li>

                                    <li class="woocommerce-order-overview__payment-method method">
                        Método de pagamento:                        <strong>Transferência Bancária Rápida e Gratuita pelo Aplicativo do Banco</strong>
                    </li>
</div> <!-- <div id="pdfprintcontentarea"> -->
';

//$html = file_get_contents(__DIR__. '/woocommerce/checkout/thankyou.php');
$mpdf->SetProtection(array(),'','MyPassword');
$mpdf->WriteHTML($html,\Mpdf\HTMLParserMode::HTML_BODY);// Load the html
$mpdf->Output('invoice.pdf',"D");
$mpdf->cleanup();

请问我该如何扭转这种局面?

提前感谢您!

【问题讨论】:

  • 你点击的按钮,我们可以看一下代码,它在哪里钩住了?似乎您需要将订单ID解析为php脚本。
  • 嗨@Precious-Omonze 这是按钮`function pila_print_button_thankyou() { echo''; } add_action('woocommerce_before_thankyou','cincopila_print_print_area'); `
  • 这个按钮到底去哪里了?因为它似乎没有携带任何数据。
  • 在您的错误通知中说... $order 未定义。所以$order = $_GET[$order-&gt;get_order_number()]; 是不可能的。
  • 说得好@helgatheviking!我该怎么办?我应该在文件中调用 WC_Order 对象吗?我已经试过了。

标签: php wordpress woocommerce pdf-generation mpdf


【解决方案1】:

您需要在创建wc_get_order 后运行它,并且找到一种简单的方法来获取订单ID。这是我在下面提出的解决方案。

<?php
/**
 * @Author: exame
 * @Last Modified time: 2020-11-05 15:47:01
 */
use Mpdf\Mpdf;

require_once __DIR__ . '/vendor/autoload.php';



function pekky_print_pdf( $order_id ) {
$mpdf = new Mpdf();

$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);

$mpdf = new \Mpdf\Mpdf([
    'mode' => 'utf-8',    
    'orientation' => 'P',
    'format' => 'A4'
]);

$order = wc_get_order( $order_id ); 

$html = '
<div id="pdfprintcontentarea">
                    <p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received">Obrigado. Seu pedido foi recebido. Enviamos o comprovante de compra por e-mail para você.</p>
            <p>Tempo de Reserva do Pedido: <b>24 horas</b> - Por favor efetue o pagamento agora antes que você perca a reserva!</p>
            <ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">

            <li class="woocommerce-order-overview__order order">
                
                <strong>$order->get_order_number();</strong>
            </li>
                            
            <li class="woocommerce-order-overview__date date">
                Hora:                   <strong>10:56:01.507644</strong>
            </li>

            <li class="woocommerce-order-overview__date date">                  
                    <strong>wc_format_datetime( $order->get_date_created() );</strong>
            </li>

                
            <li class="woocommerce-order-overview__total total">
                    Total:                  <strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">R$</span>5,00</bdi></span></strong>
            </li>

                <li class="woocommerce-order-overview__total total">
                    Status Pedido:                  <strong>Aguardando</strong>
                </li>

                                    <li class="woocommerce-order-overview__payment-method method">
                        Método de pagamento:                        <strong>Transferência Bancária Rápida e Gratuita pelo Aplicativo do Banco</strong>
                    </li>
</div> <!-- <div id="pdfprintcontentarea"> -->
';

//$html = file_get_contents(__DIR__. '/woocommerce/checkout/thankyou.php');
$mpdf->SetProtection(array(),'','MyPassword');
$mpdf->WriteHTML($html,\Mpdf\HTMLParserMode::HTML_BODY);// Load the html
$mpdf->Output('invoice.pdf',"D");
$mpdf->cleanup();
}

// Hook to a woo func.
add_action( 'woocommerce_before_thankyou', 'pekky_print_pdf', 10, 1 );

【讨论】:

    【解决方案2】:

    非常感谢您的帮助。 这就是我扭转局面的方法。

    您需要知道我在我的 Template-Child 中自定义了我的 mPDF Composer 安装,而在默认根文件夹中NOT

    我必须明确引用 Wordpress wp-config.php 文件,否则由于我的自定义安装,这永远不会起作用。

    我必须明确引用 Woocommerce 类 class-wc-order.php 文件。

    现在代码如下,我可以接收订单对象并操作我需要的东西。

    代码:

    <?php
    
    // Root Directory WP Config
    require_once '/xampppserver2/htdocs/mrdigital/wp-config.php';   
    
    // Root Directory CLASS WC ORDER
    require_once '../../plugins/woocommerce/includes/class-wc-order.php';   
    
    // Load MPDF Loader
    require_once __DIR__ . '/vendor/autoload.php';
    
    use Mpdf\Mpdf;
    
    $mpdf = new Mpdf();
    $mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);
    
    $order = new WC_Order($_GET['key']);
    

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多