Magento2: Cách tạo tệp PDF trong mô-đun tùy chỉnh


8

Tôi muốn tạo một pdf tùy chỉnh khi bán và đính kèm nó vào email bán hàng trong một mô-đun tùy chỉnh.

Tôi nghĩ rằng tôi cần phải mở rộng Magento\Sales\Model\Order\Pdf\AbstractPdfđể tạo pdf nhưng tôi không chắc chắn.

Có ai đã làm điều này trước đây hoặc có bất kỳ ý tưởng nào nếu tôi đi đúng hướng?

// biên tập:

Theo các nhận xét, đây là một bố cục cơ bản về cách tôi đưa http://www.fpdf.org/ vào mô-đun tùy chỉnh của mình:

Đầu tiên tôi tải xuống gói fpdf. Tôi giải nén các tập tin và đặt tất cả chúng vào Helperthư mục Mô-đun của mình , trông giống như sau:

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

Data.php là tệp duy nhất tôi đã có trong thư mục này vì nó chứa lớp Dữ liệu trợ giúp của tôi.

Tiếp theo tôi chỉnh sửa FPDF.php và thêm không gian tên mô-đun của mình vào đó.

Tôi đã chỉnh sửa Data.phptệp trợ giúp của mình và sử dụng lớp FPDF không gian tên của mình:

use Company\ModuleName\Helper\FPDF as FPDF;

Tôi đã xác định bất kỳ infos pdf nào tôi cần trong Lớp dữ liệu - bạn không cần điều này:

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


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

và xây dựng nó

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

Sau đó tôi đã tạo phương thức của mình và tạo 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;
}

Sau đó, bạn gọi phương thức của mình trong bộ điều khiển thông qua trình trợ giúp của bạn (tất nhiên bạn cần bao gồm):

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


Bạn đã nhận được bất cứ nơi nào với điều này?
LM_Fielding

1
Rốt cuộc tôi đã không đi theo con đường đó. Tôi đã thử nhưng cuối cùng có vẻ quá phức tạp để thử và sử dụng lớp AbstractPdf. Tôi đã kết thúc bao gồm cả FPDF với mô-đun của mình (trong Trình trợ giúp) và sử dụng nó để tạo các tệp pdf. fpdf.org
tecjam

1
Xuất sắc. Bạn đã xem xét dompdf? github.com/dompdf/dompdf
LM_Fielding

1
Tôi đã làm, nhưng một lý do là tại sao tôi không sử dụng nó là vì tôi không muốn phải hiển thị html trước và sau đó phải kết xuất html vào pdf. Cũng có những lý do khác, nhưng tôi không thể nhớ chúng là gì. Để sử dụng, nó có thể tốt hơn, nhưng chỉ bạn mới có thể quyết định điều đó.
tecjam

Xin chào, bất kỳ cập nhật về câu hỏi này. Tôi đang cố gắng tạo PFD cho mô-đun tùy chỉnh của mình - Magento2.
Dev

Câu trả lời:


1

Bạn có thể sử dụng FPDF hoặc TCPDF để tạo PDF.

Hãy thử chạy một trong các lệnh sau từ thư mục gốc M2

composer require setasign/fpdf:1.8.1

Nó sẽ thêm thư viện fpdf trong thư mục nhà cung cấp dưới dạng setasign / fpdf. Sau khi cài đặt fpdf, bạn có thể sử dụng FPDF trong mô-đun tùy chỉnh để tạo PDF.

$ pdf = mới \ FPDF ();

HOẶC LÀ

composer require tecnickcom/tcpdf

Nó sẽ thêm thư viện tcpdf trong thư mục nhà cung cấp dưới dạng tecnickcom / tcpdf. Sau khi cài đặt tcpdf, bạn có thể sử dụng TCPDF trong mô-đun tùy chỉnh để tạo PDF.

$ pdf = new \ TCPDF (PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, đúng, 'UTF-8', sai);


0

Magento2: Cách tạo tệp PDF trong mô-đun tùy chỉnh

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'
        );
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.