PHP MPDF SetSourceFile разделить PDF-файлы - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь разделить PDF на несколько, чтобы уменьшить размер файла. PDF-файлы содержат меньше страниц, но размер файла остается таким же, как полный PDF-файл. Ниже я показываю функцию с проблемой. Я считаю, что проблема в SetSourceFile, который поддерживает полный размер файла PDF. Что я могу сделать?

publi c функция downloadPdfFull ($ id_processo) {set_time_limit (300);

    $caminho_pdf_full = public_path('pdf_full_'.$id_processo.'.pdf');

    if(!file_exists($caminho_pdf_full)){
        $this->SavePdfFull($id_processo, $caminho_pdf_full);
    }   

    $tamanho_total = filesize($caminho_pdf_full)/pow(1024, 2);

    if($tamanho_total >= 3){

        $zipname = 'processo-'.$id_processo.'.zip';

        $zip = new \ZipArchive();
        $zip->open($zipname, \ZipArchive::CREATE);

        $mpdf = new \Mpdf\Mpdf([

        ]);

        $mpdf_partes = new \Mpdf\Mpdf([

        ]);
        $mpdf_partes->simpleTables = true;

        $partes = ceil($tamanho_total/3);       

        $paginas = $mpdf_partes->SetSourceFile($caminho_pdf_full);

        $mod = ceil($paginas/($partes*10));

        $contador_partes = 0;
        for($i = 1; $i <= $paginas; $i++) {
            if($i%$mod==0) {
                $contador_partes+=1;
                $filename = 'processo-'.$id_processo.'-PARTE'.$contador_partes.'.pdf';
                $caminho = public_path($filename);

                $mpdf_partes->Output($caminho, 'F'); 

                $zip->addFile($filename);  

                $mpdf_partes = new \Mpdf\Mpdf([

                ]);
                $mpdf_partes->simpleTables = true;

                $mpdf_partes->SetSourceFile($caminho_pdf_full);

                //$mpdf_partes->RestartDocTemplate();
            }
            $pagina_importada = $mpdf_partes->ImportPage($i);

            $mpdf_partes->SetPageTemplate($pagina_importada);

            if($i != $paginas) {
                $mpdf_partes->WriteHTML('<pagebreak/>');
            }
        }

        if($paginas%$mod!=0) {
            $contador_partes+=1;

            $filename = 'processo-'.$id_processo.'-PARTE'.$contador_partes.'.pdf';

            $caminho = public_path($filename);

            $mpdf_partes->Output($caminho, 'F'); 

            $zip->addFile($filename);  
        }

        $zip->close();


        return response()->download($zipname);


    } else {
        $mpdf->Output('processo-'.$id_processo.'.pdf', 'D');
    }

}
...