首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用phpSpreadsheet将excel转换为pdf

使用phpSpreadsheet将excel转换为pdf
EN

Stack Overflow用户
提问于 2018-03-02 21:34:14
回答 3查看 10.5K关注 0票数 2

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

这里的信息

代码语言:javascript
复制
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

下面是代码

代码语言:javascript
复制
<?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);?>

编辑:

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

代码语言:javascript
复制
 Fatal error: Class 'Mpdf\Mpdf' not found in /membri/cassiodb/FEDEGARIPROVE/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php on line 20 
EN

回答 3

Stack Overflow用户

发布于 2019-03-26 20:01:52

代码语言:javascript
复制
$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");
票数 3
EN

Stack Overflow用户

发布于 2019-02-03 11:09:38

如果您已处理完缺少的Mpdf库,则可能会遇到以下错误:

代码语言:javascript
复制
Unable to `set PDF file protection, CSPRNG Functions are not available. Use paragonie/random_compat polyfill or upgrade to PHP 7.`

当然,除非您使用的是PHP7。

票数 1
EN

Stack Overflow用户

发布于 2020-03-26 08:54:20

我更改了以下代码:

代码语言:javascript
复制
//if (!function_exists('random_int') || !function_exists('random_bytes')) {                      
  if (!function_exists('random_int') ) {

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

您可能需要使用类似于以下命令的命令查找并包含random_int.php文件:

find . -name random_int.php -print

代码语言:javascript
复制
require_once "/usr/share/nginx/html/CI306/vendor/mpdf/mpdf/vendor/paragonie/random_compat/lib/random_int.php";

希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49070184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档