PHP导出空白PDF

phpspreadsheet读取模板excel文件导出空白的PDF是为什么



namespace App\Http\Controllers;

use Illuminate\Http\Request;

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf;
use PhpOffice\PhpSpreadsheet\IOFactory;

use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class TaskController extends Controller
{
    public function store(Request $request)
    {
        $spreadsheet = IOFactory::load(storage_path() . '/file/tpl/shipmentStatement.xlsx');
        $sheet = $spreadsheet->getActiveSheet();

        $sheet->setCellValue('A1', '7800');

        $writer = new Tcpdf($spreadsheet);
        $filename = storage_path() . '/file/tmp/shipmentStatement'. date('YmdHis').'.pdf'; 
        $writer->save($filename);
    }
}


这个问题可能出在Tcpdf的设置上。可以尝试设置一些选项来解决这个问题,比如设置页面方向和尺寸,以及缩放等级。可以尝试以下代码:

$writer = new Tcpdf($spreadsheet);
$writer->setPaperOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
$writer->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4);
$writer->setPageScale(1.5);
$filename = storage_path() . '/file/tmp/shipmentStatement'. date('YmdHis').'.pdf'; 
$writer->save($filename);


如果还是不行,可以尝试更改PDF输出器为Dompdf或MPDF。这些都是第三方库,需要通过Composer安装。可以在composer.json文件中加入以下代码来安装:

"require": {
    "phpoffice/phpspreadsheet": "^1.18",
    "dompdf/dompdf": "^0.8.6"
}


然后在代码中使用以下代码:

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Dompdf');


或者使用以下代码:

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


答案参考来自 https://www.wodianping.com/

因为没有指定任何样式,所以空白的PDF出来了。需要在代码中指定样式才能导出格式化的PDF文件。
(参考一下ChatGPT示例代码)


$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load('template.xlsx');

$styleArray = [
    'font' => [
        'name' => 'Arial',
        'bold' => true,
    ],
    'borders' => [
        'allBorders' => [
            'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
            'color' => ['argb' => 'FF000000'],
        ],
    ],
];

// 设置样式
$spreadsheet->getActiveSheet()->getStyle('A1:D4')->applyFromArray($styleArray);

// 输出PDF
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
$writer->save('output.pdf');