2

我正在使用 phpSpreadsheet 将内存中的 Excel 文件转换为 pdf,但我收到了这个致命的错误消息。

这里的消息

Fatal error: Uncaught exception 'PhpOffice\PhpSpreadsheet\Writer\Exception' with message 'Could not open file /pdf_finali/mario.pdf for writing.' in /membri/cassiodb/FEDEGARIPROVE/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php:260 Stack trace: #0 /membri/cassiodb/FEDEGARIPROVE/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php(33): PhpOffice\PhpSpreadsheet\Writer\Pdf->prepareForSave('/pdf_finali/mar...') #1 /membri/cassiodb/FEDEGARIPROVE/excel_to_pdf.php(29): PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf->save('/pdf_finali/mar...') #2 {main} thrown in /membri/cassiodb/FEDEGARIPROVE/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php on line 260

这里的代码

<?php

require 'vendor/autoload.php';


use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

//Inizio blocco solo per test standalone
$new_excel_path = "prova_inserimento.xlsx" ;
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load("$new_excel_path"); 
//Fine blocco solo per test standalone

echo 'Fino alla creazione del foglio tutto bene <br> <br><br><br>';

//Conversione della variabile spreadsheet in pdf


    //Creazione del writer
    $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');

    //Salvataggio del pfd
    //$pdf_path = 'pdf_finali/'.$name.'.pdf';
    $pdf_path = 'pdf_finali/mario.pdf';
    echo '<br>';
    echo $pdf_path;
    $writer->save($pdf_path);?>

编辑:

我找到了上一个问题的解决方案(我还编辑了上面的代码,因为我把保存文件的路径写得很糟糕),但现在我得到了这个。

 Fatal error: Class 'Mpdf\Mpdf' not found in /membri/cassiodb/FEDEGARIPROVE/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php on line 20 
4

3 回答 3

3
$vendorDirPath = realpath(__DIR__ . '/vendor');
if (file_exists($vendorDirPath . '/autoload.php')) {
    require $vendorDirPath . '/autoload.php';
} else {
    throw new Exception(
        die("somthing went wrong");
    );
}

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("190321_CNGD0N0242017_RatingShell.xls");
$phpWord = $reader->load("190321_CNGD0N0242017_RatingShell.xls");
use \PhpOffice\PhpSpreadsheet\Style\Border;

$phpWord ->getDefaultStyle()->applyFromArray(
            [
                'borders' => [
                    'allBorders' => [
                        'borderStyle' => Border::BORDER_THIN,
                        'color' => ['rgb' => '000000'],
                    ],
                ]
            ]
        );

$xmlWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpWord,'Mpdf');

$xmlWriter->writeAllSheets();
$xmlWriter->setFooter("Sdfsdf");
$num = rand(00, 99);
//create folder named files
$xmlWriter->save("files/helloWorld$num.pdf");
于 2019-03-26T12:01:51.833 回答
1

如果您完成了缺少的 Mpdf 库,您可能会遇到以下错误:

Unable to `set PDF file protection, CSPRNG Functions are not available. Use paragonie/random_compat polyfill or upgrade to PHP 7.`

当然,除非您使用的是 PHP 7。

于 2019-02-03T03:09:38.353 回答
-1

我更改了以下代码:

//if (!function_exists('random_int') || !function_exists('random_bytes')) {                      
  if (!function_exists('random_int') ) {

在 mpdf/mpdf/src/Pdf/Protection.php 和 mpdf/mpdf/src/Pdf/Protection/UniqidGenerator.php

您可能需要使用以下命令找到并包含 random_int.php 文件:
find . -name random_int.php -print

require_once "/usr/share/nginx/html/CI306/vendor/mpdf/mpdf/vendor/paragonie/random_compat/lib/random_int.php";

希望这可以帮助。

于 2020-03-26T00:54:20.440 回答