Magento2: Cara membuat PDF dalam modul khusus

8

Saya ingin membuat pdf khusus pada penjualan dan melampirkannya ke email penjualan semua dalam modul khusus.

Saya pikir saya perlu memperluas Magento\Sales\Model\Order\Pdf\AbstractPdfuntuk menghasilkan pdf tetapi saya tidak yakin.

Adakah yang pernah melakukan ini sebelumnya atau tahu jika saya berada di jalur yang benar?

// edit:

Sesuai komentar, berikut adalah tata letak dasar bagaimana saya memasukkan http://www.fpdf.org/ ke dalam modul khusus saya:

Pertama saya mengunduh paket fpdf. Saya mengekstrak file-file itu dan meletakkannya semua di Helperfolder Modul saya , yang sekarang terlihat seperti ini:

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

Data.php adalah satu-satunya file yang sudah saya miliki di folder ini karena berisi kelas data pembantu saya.

Selanjutnya saya mengedit FPDF.php dan menambahkan modul namespace saya ke sana.

Saya mengedit Data.phpfile pembantu saya dan menggunakan kelas FPDF namespaces saya:

use Company\ModuleName\Helper\FPDF as FPDF;

Saya mendefinisikan setiap info pdf yang saya butuhkan di kelas data - Anda tidak memerlukan ini:

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


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

dan membangunnya

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

Saya kemudian menciptakan metode saya dan menghasilkan 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;
}

Kemudian Anda memanggil metode Anda di controller Anda melalui pembantu Anda (yang tentu saja harus Anda sertakan):

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

tecjam
sumber
Apakah Anda berhasil dengan ini?
LM_Fielding
1
Lagipula aku tidak menempuh rute itu. Saya mencoba tetapi pada akhirnya sepertinya terlalu rumit untuk mencoba dan menggunakan kelas AbstractPdf. Saya akhirnya menyertakan FPDF dengan modul saya (dalam Helper) dan menggunakannya untuk menghasilkan file pdf. fpdf.org
tecjam
1
Cemerlang. Apakah Anda mempertimbangkan dompdf? github.com/dompdf/dompdf
LM_Fielding
1
Ya, tapi satu alasan mengapa saya tidak menggunakannya adalah karena saya tidak ingin harus membuat html terlebih dahulu dan kemudian harus membuat html ke pdf. Ada alasan lain juga, tetapi saya tidak ingat apa itu. Untuk penggunaan Anda mungkin lebih baik, tetapi hanya Anda yang bisa memutuskan itu.
tecjam
Halo, ada pembaruan pada pertanyaan ini. Saya mencoba untuk menghasilkan PFD untuk modul-Magento2 kustom saya.
Dev

Jawaban:

1

Anda dapat menggunakan FPDF atau TCPDF untuk membuat PDF.

Cobalah untuk menjalankan salah satu dari perintah berikut dari direktori root M2

composer require setasign/fpdf:1.8.1

Ini akan menambahkan perpustakaan fpdf di folder vendor sebagai setasign / fpdf. Setelah menginstal fpdf Anda dapat menggunakan FPDF di modul kustom Anda untuk membuat PDF.

$ pdf = new \ FPDF ();

ATAU

composer require tecnickcom/tcpdf

Ini akan menambahkan perpustakaan tcpdf di folder vendor sebagai tecnickcom / tcpdf. Setelah tcpdf dipasang, Anda dapat menggunakan TCPDF di modul khusus Anda untuk membuat PDF.

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

Ajay
sumber
0

Magento2: Cara membuat PDF dalam modul khusus

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'
        );
    }
Divyesh
sumber