PrintLabel.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
  8. use Magento\Backend\App\Action;
  9. use Magento\Framework\App\ResponseInterface;
  10. use Magento\Framework\App\Filesystem\DirectoryList;
  11. class PrintLabel extends \Magento\Backend\App\Action
  12. {
  13. /**
  14. * Authorization level of a basic admin session
  15. *
  16. * @see _isAllowed()
  17. */
  18. const ADMIN_RESOURCE = 'Magento_Sales::shipment';
  19. /**
  20. * @var \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader
  21. */
  22. protected $shipmentLoader;
  23. /**
  24. * @var \Magento\Shipping\Model\Shipping\LabelGenerator
  25. */
  26. protected $labelGenerator;
  27. /**
  28. * @var \Magento\Framework\App\Response\Http\FileFactory
  29. */
  30. protected $_fileFactory;
  31. /**
  32. * @param Action\Context $context
  33. * @param \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
  34. * @param \Magento\Shipping\Model\Shipping\LabelGenerator $labelGenerator
  35. * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
  36. */
  37. public function __construct(
  38. Action\Context $context,
  39. \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader,
  40. \Magento\Shipping\Model\Shipping\LabelGenerator $labelGenerator,
  41. \Magento\Framework\App\Response\Http\FileFactory $fileFactory
  42. ) {
  43. $this->shipmentLoader = $shipmentLoader;
  44. $this->labelGenerator = $labelGenerator;
  45. $this->_fileFactory = $fileFactory;
  46. parent::__construct($context);
  47. }
  48. /**
  49. * Print label for one specific shipment
  50. *
  51. * @return ResponseInterface|void
  52. */
  53. public function execute()
  54. {
  55. try {
  56. $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
  57. $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
  58. $this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment'));
  59. $this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking'));
  60. $shipment = $this->shipmentLoader->load();
  61. $labelContent = $shipment->getShippingLabel();
  62. if ($labelContent) {
  63. $pdfContent = null;
  64. if (stripos($labelContent, '%PDF-') !== false) {
  65. $pdfContent = $labelContent;
  66. } else {
  67. $pdf = new \Zend_Pdf();
  68. $page = $this->labelGenerator->createPdfPageFromImageString($labelContent);
  69. if (!$page) {
  70. $this->messageManager->addError(
  71. __(
  72. 'We don\'t recognize or support the file extension in this shipment: %1.',
  73. $shipment->getIncrementId()
  74. )
  75. );
  76. }
  77. $pdf->pages[] = $page;
  78. $pdfContent = $pdf->render();
  79. }
  80. return $this->_fileFactory->create(
  81. 'ShippingLabel(' . $shipment->getIncrementId() . ').pdf',
  82. $pdfContent,
  83. DirectoryList::VAR_DIR,
  84. 'application/pdf'
  85. );
  86. }
  87. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  88. $this->messageManager->addError($e->getMessage());
  89. } catch (\Exception $e) {
  90. $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
  91. $this->messageManager->addError(__('An error occurred while creating shipping label.'));
  92. }
  93. $this->_redirect(
  94. 'adminhtml/order_shipment/view',
  95. ['shipment_id' => $this->getRequest()->getParam('shipment_id')]
  96. );
  97. }
  98. }