Изображения Laravel Excel неправильно отображаются на первой странице при экспорте в PDF (DOMPDF) - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Laravel Excel для создания файлов Excel и PDF.
Загрузка Excel полностью в порядке, но экспорт PDF - нет.

Я использую DOMPDF для создания PDF-файлов Я включаю изображения в файл, используя метод registerEvents.
Образец кода;

public function registerEvents(): array
{
    $items = $this->items;
    $stream_args = [
        "ssl" => [
            "verify_peer"=>false,
            "verify_peer_name"=>false
        ],
        "http" => [
            'timeout' => 60,
            'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/3.0.0.1'
        ]
    ];

    $img_height = Drawing::pixelsToPoints((543/445) * $this->image_width);
    $cell_height = Drawing::pixelsToPoints($img_height * 0.8);
    $cell_width = (Drawing::pixelsToPoints((543/445) * $img_height) / 7);

    return [
        AfterSheet::class => function(AfterSheet $event) use ($items, $stream_args, $img_height, $cell_height, $cell_width) {
            $worksheet = $event->sheet->getDelegate();

            // set page layout
            $worksheet->getPageSetup()
                ->setOrientation(PageSetup::ORIENTATION_LANDSCAPE)
                ->setPaperSize(PageSetup::PAPERSIZE_A4)
                ->setHorizontalCentered(true)
                ->setVerticalCentered(true);

            $worksheet->getPageMargins()
                ->setHeader(0.5)
                ->setFooter(0.5)
                ->setTop(0.25)
                ->setRight(0.25)
                ->setLeft(0.25)
                ->setBottom(0.25);

            $worksheet->getStyle('A1:H'.(count($items)+1))
                ->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);

            // set column widths
            $worksheet->getColumnDimension('A')->setWidth($cell_width);

            // add images
            foreach ($items as $index => $item) {
                $i = ($index+2);

                // set row height
                $worksheet->getRowDimension($i)->setRowHeight($cell_height);

                // add image
                if (! empty($item['image'])) {
                    $response = file_get_contents($item['image'], false, stream_context_create($stream_args));
                    $gdImage = imagecreatefromstring($response);

                    if ($gdImage) {
                        $drawing = new MemoryDrawing();
                        $drawing
                            ->setName($item['name'])
                            ->setDescription($item['name'])
                            ->setCoordinates('A'.$i)
                            ->setImageResource($gdImage)
                            ->setRenderingFunction(MemoryDrawing::RENDERING_JPEG)
                            ->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT)
                            ->setHeight($img_height)
                            ->setWorksheet($worksheet);
                    }
                }
            }
        },
    ];

}

Изображения в сгенерированном PDF отображаются маленькими только на первой странице. Не имеет значения количество изображений на первой странице, они всегда маленькие, на страницах 2 и выше изображения отображаются в кодированном виде.

Я пытался использовать создание загрузки с использованием FromCollection, FromArray, FromView экспортируемых задач.
Мне не удается использовать библиотеку рендеринга MPDF, так как я достиг предела pcre.backtrace, и библиотека TCPDF не может экспортировать что-либо.

Используются версии;
"maatwebsite/excel": "3.1.3" "dompdf/dompdf": "^0.8.3"

...