Question

I am using a custom module which is including a php file from lib . But it is giving error in di:compile command as -

Fatal error: Cannot declare class PDFMerger, because the name is already in use in /home/xyz/web/mysite/public_html/lib/PDFMerger/PDFMerger.php on line 36

The code of file which is including it is -

<?php

namespace VendorName\ModuleName\Controller\Adminhtml\Barcode;

use Magento\Backend\App\Action;
require __DIR__ . '/../../../../../../../lib/PDFMerger/PDFMerger.php';
use PDFMerger;

class Printlabel extends Action
{
    protected $_helper;
    protected $_storeManager;
    protected $_pdfMerger;
    protected $response;
    protected $_dir;
    public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \HOM\Barcode\Helper\Data $helper,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        PDFMerger $pdfMerger,
        \Magento\Framework\App\Response\Http $response,
        \Magento\Framework\Filesystem\DirectoryList $dir
    )
    {
        parent::__construct($context);
        $this->_helper = $helper;
        $this->_storeManager = $storeManager;
        $this->_pdfMerger = $pdfMerger;
        $this->response = $response;
        $this->_dir = $dir;
    }

    public function execute()
    {
        $fileNames = array();
        $barcode_helper = $this->_helper;
        $order_ids = $this->getRequest()->getPost('selected', array());

        foreach ($order_ids as $order_id) {
            // generate label
            $label_data = $barcode_helper->printOrderLabelOnly($order_id);
            if (isset($label_data['tracking_code'])) {
                $fileNames[] = $label_data['tracking_code'] . '.pdf';
            }

            // if (isset($label_data['tracking_code'])) {
            //     $barcode_helper->download($label_data['tracking_code'] . '.pdf');
            // }
        }
        $mediaUrlDir = $this->_dir->getPath('media');
        $file_path = $mediaUrlDir . '/barcodes/';

        $pdf = $this->_pdfMerger;
        //$barcodeFilename = array();
        if (count($fileNames)) {
            foreach ($fileNames as $fileName) {
                if (file_exists($file_path . $fileName)) {
                    //$barcodeFilename[] = str_replace('.pdf', '', $fileName);
                    $pdf->addPDF($file_path . $fileName, 'all');
                }
            }
            //$barcodeFilenameFinal = implode('_', $barcodeFilename) . '.pdf';
            $barcodeFilenameFinal = 'barcodes_' . time() . '.pdf';
            $pdf->merge('file', $file_path . $barcodeFilenameFinal);

            $barcode_helper->download($barcodeFilenameFinal);
            //$zip_file_name = 'barcodes_' . time() . '.zip';
            //$file_path = $this->_helper->getBaseMediaUrl() . '/barcodes/';
            //$this->zipFilesDownload($fileNames,$zip_file_name,$file_path);
        }

        // redirect
        $redirectUrl = $this->_objectManager->create('Magento\Backend\Helper\Data')->getUrl('sales/order/');
        $this->response->setRedirect($redirectUrl)->sendResponse();
    }

    public function zipFilesDownload($file_names, $archive_file_name, $file_path)
    {
        $zip = new ZipArchive();

        if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE) !== TRUE) {
            return false;
        }

        foreach ($file_names as $files) {
            $zip->addFile($file_path . $files, $files);
        }
        $zip->close();

        header("Content-type: application/zip");
        header("Content-Disposition: attachment; filename=$archive_file_name");
        header("Pragma: no-cache");
        header("Expires: 0");
        readfile("$archive_file_name");
        exit;
    }

    public function zipFilesDownload2($file_names, $archive_file_name, $file_path)
    {
        $zip = new ZipArchive();

        if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE) !== TRUE) {
            return false;
        }

        foreach ($file_names as $files) {
            $zip->addFile($file_path . $files, $files);
        }
        $zip->close();

        header("Content-type: application/zip");
        header("Content-Disposition: attachment; filename=$archive_file_name");
        header("Pragma: no-cache");
        header("Expires: 0");
        readfile("$archive_file_name");
    }
}

Please provide solution.

Was it helpful?

Solution

You may try the process described below.

Copy your PDFMerger/PDFMerger.php files into your Magento "lib/internal" folder in the root Magento installation directory and change the controller as follows.

<?php

namespace VendorName\ModuleName\Controller\Adminhtml\Barcode;

use Magento\Backend\App\Action;
//require __DIR__ . '/../../../../../../../lib/PDFMerger/PDFMerger.php';
require_once('lib/PDFMerger/PDFMerger.php');
//use PDFMerger;

class Printlabel extends Action
{

--------------------
--------------------
public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \HOM\Barcode\Helper\Data $helper,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
       // PDFMerger $pdfMerger,
        \Magento\Framework\App\Response\Http $response,
        \Magento\Framework\Filesystem\DirectoryList $dir
    )
    {
        parent::__construct($context);
        $this->_helper = $helper;
        $this->_storeManager = $storeManager;
        //$this->_pdfMerger = $pdfMerger;
        $this->response = $response;
        $this->_dir = $dir;
    } 


    public function execute()
    {
        $fileNames = array();
        $barcode_helper = $this->_helper;
        $order_ids = $this->getRequest()->getPost('selected', array());

        foreach ($order_ids as $order_id) {
            // generate label
            $label_data = $barcode_helper->printOrderLabelOnly($order_id);
            if (isset($label_data['tracking_code'])) {
                $fileNames[] = $label_data['tracking_code'] . '.pdf';
            }

            // if (isset($label_data['tracking_code'])) {
            //     $barcode_helper->download($label_data['tracking_code'] . '.pdf');
            // }
        }
        $mediaUrlDir = $this->_dir->getPath('media');
        $file_path = $mediaUrlDir . '/barcodes/';

        //$pdf = $this->_pdfMerger;
        $pdf = new \PDFMerger();
        //$barcodeFilename = array();
        if (count($fileNames)) {
            foreach ($fileNames as $fileName) {
                if (file_exists($file_path . $fileName)) {
                    //$barcodeFilename[] = str_replace('.pdf', '', $fileName);
                    $pdf->addPDF($file_path . $fileName, 'all');
                }
            }
            //$barcodeFilenameFinal = implode('_', $barcodeFilename) . '.pdf';
            $barcodeFilenameFinal = 'barcodes_' . time() . '.pdf';
            $pdf->merge('file', $file_path . $barcodeFilenameFinal);

            $barcode_helper->download($barcodeFilenameFinal);
            //$zip_file_name = 'barcodes_' . time() . '.zip';
            //$file_path = $this->_helper->getBaseMediaUrl() . '/barcodes/';
            //$this->zipFilesDownload($fileNames,$zip_file_name,$file_path);
        }

        // redirect
        $redirectUrl = $this->_objectManager->create('Magento\Backend\Helper\Data')->getUrl('sales/order/');
        $this->response->setRedirect($redirectUrl)->sendResponse();
    }

    ------------------
    ------------------

}

OTHER TIPS

Thanks, Its working for me. Its working with this code "$pdf = new \PDFMerger();" instead of '$pdf = $this->_pdfMerger';

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top