PHP中的FPDF自动PDF发票(创建Wordpress插件)

时间:2017-10-19 10:12:52

标签: php wordpress fpdf


我希望有一个人可以帮助我。

我想要实现的目标:
我想在订单发生后立即创建自动PDF发票并将其下载到文件夹。它不必显示。

我的问题:
我只关心PDF的创建。不知何故,我无法创建和下载PDF。我已经在这里阅读了关于这个问题的类似问题,但是无法弄清楚问题。

到目前为止我做了什么:
我有一个插件,必须集成自动计费。在插件文件夹(... / wp-content / plugins / myplugin /)中,我创建了一个文件夹fpdf并安装了fpdf。

fpdf.php位于... /myplugin/fpdf/fpdf.php

我创建了一个包含以下代码的文件进行测试。这也在fpdf文件夹中(... /myplugin/fpdf/pdf_creation.php):

<?php
require(plugin_dir_path( __FILE__ ).'fpdf/fpdf.php');   
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');

//$filename = '/wp-content/plugins/myplugin/rechnungen/rechnung.pdf';
//$pdf->Output($filename,'F');

//testing output
$pdf->Output();
?>

我得到了什么:
如果我尝试直接在浏览器中打开PDF,我会在Firefox中获得一个http ERROR 500(Chrome)白页。

我希望你们中的一个能帮助我 最好的问候

1 个答案:

答案 0 :(得分:0)

你不能使用wordpress&#39;函数在wordpress中未包含的文件中。你得到错误500(内部服务器错误)的原因是在wordpress之外调用wordpress-function plugin_dir_path(即直接访问php文件时)会给你一个致命的错误,因为它根本就不存在!

要获得致命错误的一些提示(通常只显示空白页面和响应代码500),请确保首先启用display_errors

<?php
ini_set('display_errors', 1);
//...other code here
  

确保在完成开发后将其删除 - 您不希望通过永久保密来泄露敏感信息!

至于实际行动&#34;周围&#34; wordpress用于创建PDF,它首先可能不是最好的主意 - 因为稍后您可能需要访问许多其他wordpress函数。

我喜欢做的事情是这样的:

<?php
/*
Plugin Name: Test plugin
Plugin URI: 
Description: Whatever
Version: 0.01
Author: Mikk3lRo
*/

myplugin::init();

class myplugin {
    static function init() {
        register_activation_hook(__FILE__,      array(__CLASS__, 'on_activate'));
        register_deactivation_hook(__FILE__,    array(__CLASS__, 'on_deactivate'));
        add_action('init',                      array(__CLASS__, 'rewrites'));
        add_filter('query_vars',                array(__CLASS__, 'query_vars'));
        add_filter('template_redirect',         array(__CLASS__, 'get_pdf'),0);
    }
    static function on_activate() {
        self::rewrites();
        flush_rewrite_rules();
    }
    static function on_deactivate() {
        flush_rewrite_rules();
    }
    static function rewrites() {
        /* This basically catches everything
           below http://yourdomain.com/get-pdf/
           and passes it to your pdf-generating
           script, so your URL's can be:
           http://yourdomain.com/get-pdf/invoice-1.pdf
           http://yourdomain.com/get-pdf/My-invoice-for-you.pdf
           ...or whatever your like... */
        add_rewrite_rule('get-pdf', 'index.php?myplugin_show_pdf=true', 'top');
    }
    static function query_vars($vars) {
        $vars[] = 'myplugin_show_pdf';
        return $vars;
    }
    static function get_pdf() {
        if (get_query_var('myplugin_show_pdf')) {
            include_once __DIR__ . '/get_pdf.php';
        }
    }

}

然后,您可以在get_pdf.php中执行任何操作,并且可以完全访问正常的wordpress环境:

<?php
$pdf_slug = basename($_SERVER['REQUEST_URI']);

require(plugin_dir_path( __FILE__ ).'fpdf/fpdf.php');   
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Cell(40,10,'This is the pdf for: ' . $pdf_slug);

//$pdf->Output($filename,'F');
$pdf->Output();
die();

另一方面,我建议使用TCPDF - 它是FPDF的一个分支,在其他一些改进中对UTF8有更好的支持。在开发的这一点上,切换起来应该很容易。