Magento2:如何在自定义模块中创建PDF


8

我想在销售时生成自定义pdf,并将其附加到所有自定义模块中的销售电子邮件中。

我认为我需要扩展Magento\Sales\Model\Order\Pdf\AbstractPdf以生成pdf,但我不确定。

有没有人做过这件事,或者我是否在正确的轨道上有任何想法?

//编辑:

根据评论,这是有关如何将http://www.fpdf.org/纳入自定义模块的基本布局:

首先,我下载了fpdf软件包。我提取了文件并将它们全部放入“模块” Helper文件夹,现在看起来像这样:

- Helper -- font (folder) -- makefont (folder) -- FPDF.php -- Data.php

Data.php 是我在此文件夹中已经拥有的唯一文件,因为它包含我的助手数据类。

接下来,我编辑了FPDF.php并将模块命名空间添加到其中。

我编辑了助手Data.php文件,并使用了命名空间FPDF类:

use Company\ModuleName\Helper\FPDF as FPDF;

我在数据类中定义了我需要的任何pdf信息-您不需要这样做:

// PDF INFOS
protected $pdfFileDir = 'someDir/someSubDir/';
protected $logo1 = 'myLogo.jpg';
protected $logo2 = 'myExtraLogo.jpg';


/**
 * @var \Company\ModuleName\Helper\FPDF
 */
protected $_pdf;

并构建它

/**
 * @param \Company\ModuleName\Helper\FPDF $pdf
 * @param array $data
 */
public function __construct(
    (...)
    FPDF $pdf,
    (...)
    array $data = []
) {
    (...)
    $this->_pdf = $pdf;
    (...)
    parent::__construct($context);
}

然后,我创建了我的方法并生成了pdf:

public function generatePdf($productId, $someOtherVars)
{
    #start the pdf
    $pdf = new FPDF();

    $pdf->AddPage();
    $pdf->SetAutoPageBreak(0, 5);
    $pdf->SetFont('Arial', 'B', 16);

    // do your FPDF stuff here
    // eg: $pdf->Cell('', '', iconv('UTF-8', 'windows-1252', 'Page Header Title'), 0, 1);

    // $pdf->Ln(8);
    // $pdf->Cell('', '', $today, 0, 1, 'L');
    // and so forth .. see the FPDF documentation

    // render pdf
    $filename = 'somename' . $productId . '.pdf';
    $pdf->Output($this->getPdfBaseDir() . $filename, 'F');

    return $this->getPdfBaseDir() . $filename;
}

然后,通过助手(当然需要包括它)在控制器中调用方法:

$this->dataHelper->generatePdf($yourVars);


你有什么办法吗?
LM_Fielding '16

1
毕竟我没有走那条路。我尝试过,但最后似乎很难尝试使用AbstractPdf类。我最终将FPDF包含在我的模块中(在Helper中),并用它来生成pdf文件。fpdf.org
tecjam

1
辉煌。您考虑过dompdf吗? github.com/dompdf/dompdf
LM_Fielding '16

1
我做到了,但是为什么我不使用它的一个原因是我不想先呈现html,然后再将html呈现为pdf。也有其他原因,但我不记得它们是什么。对于您的使用可能会更好,但是只有您可以决定。
tecjam '16

您好,有关此问题的任何更新。我正在尝试为我的自定义模块Magento2生成PFD。
2016年

Answers:


1

您可以使用FPDF或TCPDF创建PDF。

尝试从M2根目录运行以下命令之一

composer require setasign/fpdf:1.8.1

它将在供应商文件夹中将fpdf库添加为setasign / fpdf。一旦安装了fpdf,就可以在自定义模块中使用FPDF来创建PDF。

$ pdf = new \ FPDF();

要么

composer require tecnickcom/tcpdf

它将在供应商文件夹中将tcpdf库添加为tecnickcom / tcpdf。安装tcpdf后,您可以在自定义模块中使用TCPDF来创建PDF。

$ pdf =新\ TCPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,是,'UTF-8',是);


0

Magento2:如何在自定义模块中创建PDF

public function execute()
{
    $file = $this->getRequest()->getParam('file');

    if(isset($file) && !empty($file)) {

        $pdf = \Zend_Pdf::load($this->directory_list->getPath(DirectoryList::MEDIA) . DIRECTORY_SEPARATOR . $file);
        $fileName = test.pdf;
        $this->fileFactory->create(
        $fileName,
        str_replace('/Annot /Subtype /Link', '/Annot /Subtype /Link /Border[0 0 0]', $pdf->render()),
        \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR,
        'application/pdf'
        );
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.