如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2020年9月7日

PHP程式設計: PHP程式如何將圖片放入excel檔案中 Using PHPExcel

作者: 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());        

}




2020年8月20日

[輸入判斷] PHP判斷前端Checkbox欄位是否勾選

作者: Fred F.M. Wang (FW知識瑣記) 日期:20200820

 PHP程式接收前台網頁輸入的值,比較容易發生錯誤的是checkbox欄位,不像其他類型的輸入欄位

可以單純用$_POST['<field name >']接收輸入值那麼簡單。


前端的一個checkbox輸入欄,如果沒有勾選,則該表單submit後,後台PHP處理程式無法接收到此欄位的內容,因此判斷checkbox輸入欄是否有勾選,要用

isset($_POST['<field name >'])來判斷,如下面範例:


前端HTML

<form action="getcheckbox.php" method="post">

     Only Weekend<input type="checkbox" name="wkend" value="weekendonly">

     <input type="submit" value="submit">

</form>


後端PHP

<?php

$wkend = false;

if(isset($_POST['wkend'])) {

    $wkend = true;

    echo "weekly only checked";

} else {

    echo "Not check weekly only";    

}

?>

 

 

2020年7月31日

PHP二維key-value陣列根據特定欄位內容去除重複資料

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2020-7-31

PHP一維陣列要移除重複的內容,很簡單只要使用array_unique函式即可

例如 :

$input = array("green", "red", "green", "blue", "red");

$result = array_unique($input);

結果$result內容為array( "green", "red", "blue");


二維的key-value陣列要根據特定欄位內容移除重複,要如何處理?


下面是多維(key-value)陣列 :  

items[0][“fieldname1”] = …;

items[0][“fieldname2”] = …;

items[0][“fieldname3”] = …;

items[0][“fieldname4”] = …;

…

items[0][“fieldnamen”] = …;


items[1][“fieldname1”] = …;

items[1][“fieldname2”] = …;

items[1][“fieldname3”] = …;

items[1][“fieldname4”] = …;

…

items[1][“fieldnamen”] = …;

….


要去除上面陣列 fieldname1, fieldname2, fieldname3欄位內容相同的item, 程式如下 :  


$new_items = array();

$keys = array();

if(!empty($items)) {

    foreach($items as $key => $rec) {

       $reckey = array($rec["fieldname1"],$rec["fieldname2"],$rec["fieldname3"]);

       if(!in_array($reckey,$keys)) {

           $keys[] = $reckey;

           $new_items[] = $rec;    

       }        

    }    

}

$items = $new_items;

2020年7月20日

PHP程式解決記憶體不足的錯誤 "Allowed memory size of ... bytes exhausted"

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2020/7/20

PHP程式執行時發生下面錯誤
Fatal error: Allowed memory size of ... bytes exhausted (tried to allocate ... bytes) in  ….
表示是可用記憶體已耗盡。
可透過兩種方法解決 :
1、修改php.ini
例如 : memory_limit = 128
這種方法需要重啟web服務器。

2、在程式中使用ini_set函數修改設訂選項值
例如 : ini_set ('memory_limit', '128M')

如果一直加大記已體還解決不了問題,那麼可能程式中發生幾種無限耗用資源的情況
1 無窮的迴圈 : 迴圈中持續分配記憶體,例如增加陣列大小
2 無窮的遞迴程式 : 遞迴程式沒有寫好結束的條件。

3 使用了過大的陣列或過多的變數 (註 : 程式中不再用到陣列或變數,可使用unset()或$var = null釋放記憶)

好好檢查程式吧!

2020年7月2日

各大學人工智慧,機器人相關系所與學分學程 (包含大學,科大,研究所等)

作者: Fred F.M. Wang (FW知識瑣記) 日期:2019-09-30 最近修訂:2023-3-20

研究所博士班
 
 
研究所碩士班(一般生) 


研究所碩士班(在職進修)


大學
 
科技大學

學分學程

相關文章