作者: Fred F.M. Wang (FW知識瑣記) 日期:20200907
PHP程式中可以使用PHPExcel讀取製作好的Excel樣板,根據條件動態寫入資料,產生新的Excel檔案,用於產生Excel報表檔。
如果要根據不同條件放入不同的簽名圖片檔要怎麼做?
可以參考下面範例 :
// 主程式
$objPHPExcelOut = PHPExcel_IOFactory::load($outfilepath); // $outfilepath寫入的Excel檔案路徑
$PHPExcelWriter = PHPExcel_IOFactory::createWriter($objPHPExcelOut, "Excel2007");
….
<寫入資料>
.....
$row = 30;
$signcol = "E";
$offsetX = 27;
$offsetY = 10;
// 寫入簽名檔
$this->addSignImage($objPHPExcelOut,$signcol,$row,$offsetX,$offsetY);
/* ***** 副程式:寫入簽名檔 ***** */
private function addSignImage($objPHPExcelOut,$column,$row,$offsetX,$offsetY) {
$signimgfile = dirname($_SERVER["SCRIPT_FILENAME"]) . "<圖片來源檔案路徑>";
// <圖片來源檔案路徑與檔名> 例如"/files/shipinf/templates/image_imqsign.png"
$gdImage = imagecreatefrompng($signimgfile);
// 保持PNG圖片背景透明
imagealphablending($gdImage, false); // 關閉 alpha 渲染
imagesavealpha($gdImage, true); // 並設置 alpha 標誌以在保存 PNG 圖像時保存完整的
alpha 通道資訊
$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
$objDrawing->setName("signimage");
$objDrawing->setDescription("signimage");
$objDrawing->setImageResource($gdImage);
$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG);
$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
$objDrawing->setCoordinates($column.$row); // 圖片左上角放置在哪個儲存格的位置
$objDrawing->setHeight(390); // 設定圖片高度(寬度會等比例變寬)
$objDrawing->setOffsetX($offsetX); // 向左位移幾個像素
$objDrawing->setOffsetY($offsetY); // 向下位移幾個像素
$objDrawing->setWorksheet($objPHPExcelOut->getActiveSheet());
}