[英]mPDF - PHP Script inside the html block of code to generate PDF file
大家好,請
如下在腳本中,我需要在 html 代碼中插入 PHP 腳本,但我沒有在文檔中找到任何顯示如何執行此操作的示例。
這可能嗎?
1°我使用 Wordpres
2°我使用 Woocommerce
3°我必須打印感謝頁。 在thankyou頁面上,我有一個按鈕,可以單擊並下載文件。
4°生成PDF文件的PHP文件必須接收動態數據。
5° PHP Script 必須包含在 html 代碼中,如下所示。
6°當我單擊按鈕下載 PDF 文件時,我收到以下錯誤消息。
注意:未定義變量:第22行C:\\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.php第22行
這是第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 );
十分感謝你的幫助。 這就是我扭轉局勢的方式。
1°您需要知道我在 Template-Child 中而不是在默認根文件夾中自定義了我的mPDF Composer 安裝。
2°我必須明確地引用 Wordpress wp-config.php文件,否則由於我的自定義安裝,這永遠不會起作用。
3°我必須明確地引用 Woocommerce Class class-wc-order.php文件。
4°現在在代碼中如下所示,我可以接收訂單對象並操作我需要的東西。
代碼:
<?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.