簡體   English   中英

mPDF - html 代碼塊內的 PHP 腳本,用於生成 PDF 文件

[英]mPDF - PHP Script inside the html block of code to generate PDF file

大家好,請

如下在腳本中,我需要在 html 代碼中插入 PHP 腳本,但我沒有在文檔中找到任何顯示如何執行此操作的示例。

這可能嗎?

我使用 Wordpres
我使用 Woocommerce
我必須打印感謝頁。 在thankyou頁面上,我有一個按鈕,可以單擊並下載文件。
生成PDF文件的PHP文件必須接收動態數據。
PHP Script 必須包含在 html 代碼中,如下所示。
當我單擊按鈕下載 PDF 文件時,我收到以下錯誤消息。

注意:未定義變量:第22C:\\xampppserver2\\htdocs\\mrdigital\\wp-content\\themes\\astra-child\\testmpdf.php 中的順序

致命錯誤:未捕獲錯誤:調用成員函數 get_order_number() 在 C:\\xampppserver2\\htdocs\\mrdigital\\wp-content\\themes\\astra-child\\testmpdf.php: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();

請問我怎樣才能扭轉這種局面?

先感謝您!

您需要在創建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 );

十分感謝你的幫助。 這就是我扭轉局勢的方式。

您需要知道我在 Template-Child 中而不是在默認根文件夾中自定義了我的mPDF Composer 安裝

我必須明確地引用 Wordpress wp-config.php文件,否則由於我的自定義安裝,這永遠不會起作用。

我必須明確地引用 Woocommerce Class 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']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM