Magento2:カスタムモジュールでPDFを作成する方法


8

販売時にカスタムPDFを生成し、それをすべてカスタムモジュール内の販売メールに添付したいと思います。

Magento\Sales\Model\Order\Pdf\AbstractPdfPDFを生成するために拡張する必要があると思いますが、確信はありません。

誰かが以前にこれを行ったことがありますか、または私が正しい軌道に乗っているかどうか何か考えがありますか?

//編集:

コメントに従って、http://www.fpdf.org/をカスタムモジュールにどのように含めたかに関する基本的なレイアウトを次に示します。

まず、fpdfパッケージをダウンロードしました。ファイルを抽出し、すべてをモジュールHelperフォルダーに配置しました。これは次のようになります。

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

Data.php ヘルパーのDataクラスが含まれているため、このフォルダーに既にある唯一のファイルです。

次に、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 2016

1
私は結局そのルートに行かなかった。私は試しましたが、最終的には、AbstractPdfクラスを試して使用するのは複雑すぎるようです。私は最終的に(ヘルパーの)モジュールにFPDFを含め、それを使用してPDFファイルを生成しました。fpdf.org
tecjam

1
鮮やかさ。dompdfを検討しましたか? github.com/dompdf/dompdf
LM_Fielding 2016

1
使用しましたが、使用しなかった理由の1つは、最初にhtmlをレンダリングし、次にhtmlをpdfにレンダリングする必要がないことでした。他にも理由はありましたが、何だったか思い出せません。あなたの使用にはそれが良いかもしれませんが、あなただけがそれを決めることができます。
tecjam

こんにちは、この質問の最新情報。カスタムモジュールMagento2のPFDを生成しようとしています。
Dev

回答:


1

PDFの作成には、FPDFまたはTCPDFを使用できます。

M2ルートディレクトリから次のいずれかのコマンドを実行してみてください

composer require setasign/fpdf:1.8.1

fpdfライブラリをベンダーフォルダーにsetasign / fpdfとして追加します。fpdfをインストールしたら、PDFを作成するためのカスタムモジュールでFPDFを使用できます。

$ pdf = new \ FPDF();

または

composer require tecnickcom/tcpdf

tcpdfライブラリをtecnickcom / tcpdfとしてベンダーフォルダーに追加します。tcpdfをインストールしたら、PDFを作成するためのカスタムモジュールでTCPDFを使用できます。

$ pdf = new \ TCPDF(PDF_PAGE_ORIENTATION、PDF_UNIT、PDF_PAGE_FORMAT、true、 'UTF-8'、false);


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'
        );
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.