Я использую PHP и PHPExcel, чтобы получить имя файла изображения из базы данных и выполнить операцию чтения потока. Я установил свое изображение с помощью setImageResource
функция, но она не работает, как ожидалось. Вот мой код:
<?php
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
require_once '../classes/PHPExcel/IOFactory.php';
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Asia/Calcutta');
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');
$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
$rendererLibrary = 'dompdf.php';
$rendererLibraryPath = dirname(__FILE__) . '/../libs/classes/dompdf/';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Tes');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Image...');
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$img = imagecreatefrompng('C:/Users/Downloads/logo.png');
$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName('Test image');
$objDrawing->setDescription('Test image');
$objDrawing->setImageResource($img);
$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG);
$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setHeight(150);
$objDrawing->setCoordinates('A4');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());if (!PHPExcel_Settings::setPdfRenderer($rendererName,$rendererLibraryPath)) {
die(
'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
'<br />' .
'at the top of this script as appropriate for your directory structure'
);
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('test.pdf');
exit;
Окей, первым делом первым PHPExcel_Worksheet_MemoryDrawing()
не может решить вашу проблему, если вы настаиваете на использовании потокового контента и передаете его на лист, ваш PDF не будет отображать ваше изображение. Но вы можете использовать `PHPExcel_Worksheet_Drawing () ‘, если вы тоже хотите визуализировать изображение. Вы можете обмануть это так:
stream_get_contents
или же file_get_contents
$objDrawing->setPath($path_to_your_image);
Так что, если вы хотите, чтобы ваше изображение тоже отображалось на листе, вы должны использовать PHPExcel_Worksheet_Drawing()
и для этого вы должны указать путь к файлу для визуализации этого изображения.
Я предполагаю, что это проблема PHPExcel
работать с DomPDF
, Итак, сохраните немного обсуждения здесь и отредактируйте objDrawing
к этому :
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setPath('logo.png');
Для полного образца, который я сделал, попробуйте это:
include 'PHPExcel.php';
require_once("dompdf/dompdf_config.inc.php");$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
$rendererLibrary = 'dompdf.php';
$rendererLibraryPath = dirname(__FILE__). '/dompdf';$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Tes');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Image...');
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->getActiveSheet()
->getColumnDimension('A')
->setWidth(50);
$objPHPExcel->getActiveSheet()
->getRowDimension('2')
->setRowHeight(200);
// $img = imagecreatefrompng('logo.png');
$data = file_get_contents("logo.png");
// $img = imagecreatefromstring($data);
$fp = fopen("logo1.png","w");
fwrite($fp,$data);
fclose($fp);
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setPath('logo1.png');
// $objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName('Test image');
$objDrawing->setDescription('Test image');
// $objDrawing->setImageResource($img);
// $objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG);
// $objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT);
// $objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setHeight(150);
$objDrawing->setCoordinates('A2');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
if (!PHPExcel_Settings::setPdfRenderer($rendererName,$rendererLibraryPath)) {
die(
'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
'<br />' .
'at the top of this script as appropriate for your directory structure'
);
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('test.pdf');
echo date('H:i:s') . " Done writing file.\r\n";
Рад помочь вам, надеюсь, это поможет вам 🙂
Других решений пока нет …