2022年1月15日 星期六

在 Centos 上安裝 Ghostscript ,這是 使用 PDF要用到的。

GhostScript:

https://www.ghostscript.com/index.html

下載:

https://www.ghostscript.com/releases/gsdnld.html

安裝:

在SSH終端上:

cd /usr/src

wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9550/ghostscript-9.55.0.tar.gz

tar -xzvf ghostscript-9.55.0.tar.gz

cd ghostscript-9.55.0

./configure 

make

make install


在 使用 Imagick,使用 PDF 轉換 JPG,一直發生 Internal Error 500

經查了很久,才知道,Server必須安裝 PHP Imagick 以外,還有 GhostScript,這是一個 PDF 要用的免費程式。

我的主機上沒有,所以必須安裝起來。





在 PDF Report 裡面的  PDF Layout Code下面增加產生  PDF,轉 JPG 的程式

因為,我們不知道 SC產生的 PDF 檔案名稱,只好自己用自訂的PDF檔名來產生

然後,再由自己產生的 PDF 產生 JPG

$t_pdf_file = $_SERVER['DOCUMENT_ROOT']."/_lib/tmp/id_".{pay_form_id}."_pay_form.pdf";

$t_jpg_file = $_SERVER['DOCUMENT_ROOT']."/_lib/tmp/id_".{pay_form_id}."_pay_form.jpg";

$pdf->output($t_pdf_file,"F");

$im = new Imagick();

$im->setResolution(150, 150);

$im->readImage( $t_pdf_file );

$im->writeImages( $t_jpg_file, false );




** 還有 /domains/<websitename>.com/public_html/_lib/prod/third/wkhtmltopdf/linux-amd64/wkhtmltopdf-amd64 權限要設成 "777"




2022年1月11日 星期二

ScriptCase PDF 字型

 Scriptcase 的 PDF,如果使用預設字型,也就是在 PDF Application 的設定裡font 沒有設定字型,那麼,產生出來的結果,我的情形是在電腦上可以出現中文字型,但是在手機上,就沒有中文字型!

後來,試了很久,在 PDF Application 的設定裡字型改為其他字型,結果是中文字亂碼,試了幾個,以下是中文可以出現的:

  • kozminproregular
  • cid0jp
  • cid0ct
  • cid0kr
  • kozgopromedium
PDF的字型,是抓取機器上的字型,如果有特殊字型,需內嵌在PDF檔案裏面。
猜想,前面沒有設定字型,可能就是因為預設的字型,在手機上沒有,所以出現空白。
設定好字型以後,可能就內嵌在PDF檔案裡面了,可以正常顯示。

PDF手機字型顯示問題解決了!



2022年1月9日 星期日

ScriptCase 的 Application Field Type 是 Label / Text 使用

 ScriptCase 裡面的 Field Type

如果是設定為 Label,在 程式中,無法參照到值

必須設定為 Text,而底下的屬性設為 Label Field - Cannot be changed. 這樣程式才可以參照到值。


例如:一個 Control Application

兩個欄位:

{user}、{id}

如果 {id} 為  Label,則在程式中,{id}出來的是null

必須設 {id} 為 TEXT,底下的屬性設為 Label Field,這樣在程式中,{id}就可以抓到值了。

2021年12月4日 星期六

ScriptCase的多語系處理

 ScriptCase的多語系:

1. 定義在 _lib/lang/ xxx.lang.php 裡面

現在現有的是: 

zh_cn.lang.php 簡體

zh_hk.lang.php 繁體

顯然,NetMake公司也搞不大清楚,中文語系的情況,所以,把香港的當成繁體的代表。

我試著自己增加一個 zh_tw.lang.php 還可以用。


關於語系的問題,有 language 以及 regional 兩個部分

language 是關於文字本身的

regional 是關於區域的一些用法,例如:日期、時間、星期、月等表示方式。

台灣習慣使用 yyyy-mm-dd

其他地區也許習慣 dd-mm-yyyy

所以,需要這項設定。這在Windows 裡面也有。

因此,再設定的時候,會有:



/*idioma*/

$idioma = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);

switch($idioma){

case 'pt': //Caso seja português

sc_set_language('pt_br');

sc_set_regional('pt_br');

break;

case 'es': //Caso seja espanhol

sc_set_language('es');

sc_set_regional('es_es');

break;

case 'zh_hk': //

sc_set_language('zh_hk');

sc_set_regional('zh_tw');

break;

default:

sc_set_language('en_us');

sc_set_regional('en_us');

break;

}

以下這是在 login.php 中,使用 $_GET['lang']連結的方式,選擇何種語系的方式:

寫在: Events->onApplicationInit 或 onScriptInit

if(isset($_GET['lang']) && !empty($_GET['lang']))

{

switch($_GET['lang']){

case 'pt': //Caso seja português

sc_set_language('pt_br');

sc_set_regional('pt_br');

break;

case 'es': //Caso seja espanhol

sc_set_language('es');

sc_set_regional('es_es');

break;

case 'zh_hk': //

sc_set_language('zh_hk');

sc_set_regional('zh_tw');

break;

case 'zh_tw': //

sc_set_language('zh_tw');

sc_set_regional('zh_tw');

break;

default:

sc_set_language('en_us');

sc_set_regional('en_us');

break;

}

}



2021年11月29日 星期一

2021年11月28日 星期日

避免按鈕被按了兩次!

<input type="submit" id="Contenttrns_cpButton_Update" class="btn btn-lg btn-primary btn-block" alt="{res:CCS_Update}" value="{res:CCS_Update}" name="{Button_Name}"
onclick="javascript:{this.disabled=true;document.getElementById('Contenttrns_cpButton_Cancel').disabled=true;document.trns_cp.submit();}">

在按鈕裡面多增加 

onclick="javascript:{
this.disabled=true;
document.getElementById('<cancel按鈕的ID>').disabled=true;
document.form_name.submit();
}"

Cancel按鈕是否也要失效?

2021年11月23日 星期二

CodeCharge 做一個一對多的AUDI

例如:做一個客戶,以及客戶的0~n個地址

資料庫:

customers (cust_id, name, .... , address_id, ...)

customers_address (address_id, cust_id, name, address.....)


Page: address.php

用 CodeCharge 做一個 address.php

1. 建立一個 grid :address (where cust_id = $_SESSION["UserID"])

address_id, name, address, action

action 裡面 有 修改、刪除 連結

修改:<!-- edit -->

<a href="address.php?address_id={address_id1}&action=edit" class="nav-link-style me-2" data-bs-toggle="tooltip" title="修改"><i class="ci-edit"></i></a> 

刪除:<!-- del  -->

<a href="address.php?address_id={address_id2}&remove=1" class="nav-link-style text-danger" data-bs-toggle="tooltip" title="移除" onclick="return confirm('{res:are_you_sure}');"><i class="ci-trash"></i></a></td>

2. 再建立一個 record : address (where address_id = URL($_GET["address_id"]))

可以新增、刪除、修改、取消

3. 刪除功能,可以考慮在這個 Record 中處理,或是直接在 grid 中的 del action 中傳到 address.php的頁面 BeforeInitialize 中判斷 action=del處理刪除。

4. 幫 record 建立一個 panel,當有action 新增或修改時,才出現 panel,否則不顯現(visible=false)

5. 可以考慮,grid + record 建立一個 update_panel ,這樣就不用 refresh 頁面

但是,要犧牲在 grid 中刪除的連結,使用 onclick="return confirm('Are You Sure?')" 的功能

不論按確定、還是取消,該連結都會被呼叫(大概是因為身在 update panel 中的關係)

這個現象,只要將 update_panel 拿掉,就好了!

我在做客戶購物網站時,最後還是把 update panel 拿掉了!讓客戶操作便利比較好!

以後在另外尋找兩全其美的辦法吧!


這個頁面1-(0~n)處理應該很多。會常用到,紀錄一下。

Code Charge 其實還蠻好用的,可惜公司已經不再提供新版!

正在考慮找人開發一個工具,或是在找另一個現成的工具!

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。