2023年3月6日 星期一

Image to Base64 帶入img的src內顯示

 承之前的狀況,HTML TO PDF的做法近期使用者回報圖檔會有缺圖的問題,這再開發環境並未發現但正式環境再轉檔當下若載圖有狀況就會有此問題,故調整作法直接把圖放在HTML內改善。

不過缺點顯而易見的是轉Base64那頁面的SIZE會大增,若照片多等待時間就變得更久了...不過照片多再轉PDF也是得等待故有逾時,若是再瀏覽器顯示因為有快取機制所以只有第一次得等...這就不好比較!

HTML:
<div class="flex-row" >
    <c:if test="${pic.status==true}">
<img  style="height:300px;max-width:500px;width: expression(this.width > 500 ? 500: true);" src='data:image/jpg;base64, ${pic.picbase64}' ></img><br>
    </c:if>
  </c:forEach>
</div>
  <c:forEach var="pic" items="${piclist}">

JAVA:
//轉base64 string
Base64.Encoder encoder = Base64.getEncoder();
pic.setPicbase64(encoder.encodeToString(blob.getBytes(1, (int) blob.length())).trim());

小計:
data:image/jpg; base64, 紅字處實測png, jpeg ... 只要是圖都會正確顯示,所以不用特別去抓副檔名來放,但保險起見建議還是依照實際的檔案格式來放入相對應的MIME TYPE!

2023年2月17日 星期五

檢查網路連接埠是否已被使用

日前使用者反映AP開埠起來會自動消失,看了作業系統的事件檢視器發現是SocketException造成的,因此增加連接埠是否已被使用的檢查邏輯。

備忘囉:
using System.Net.NetworkInformation;

public static bool PortInUse(int port){
bool inUse = false;
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
foreach (IPEndPoint endPoint in ipEndPoints)
{
if (endPoint.Port == port){
inUse = true;
break;
}
}
return inUse;
}

if (PortInUse(80)) {
    MessageBox.Show("80埠已被占用。");
} ......

2023年1月10日 星期二

DB2 SQL Error: SQLCODE=-137, SQLSTATE=54006, SQLERRMC=LISTAGG 排除

 DB2 LISTAGG() 有長度4000的限制,官方文件中提供個解法可以延伸到10000。

所以仿照這寫法改成

LISTAGG(CAST(CLOUMNA AS CLOB, ',')

google好些文件看了好些答案,不過限制在DB2環境也沒啥選擇,這個方式順順的PASS,結案!!

後記:

如果有排序的需求可參考下列寫法

 LISTAGG(CAST(CLOUMNA  AS CLOB, ',')  WITHIN GROUP (ORDER BY CLOUMNB)

2022年12月12日 星期一

Spring Batch發生 EmptyResultDataAccessException 的排除

日前有個job Fail拋送EmptyResultDataAccessException,因為有組套設計故update會有多筆相符狀況,去爬了文找找發現是UPDATE的機制造成的。




解決方式: 使用 setAssertUpdates(boolean); 設定成FALSE後排除,不過使用上還是得依照Table Schema設計,若無多筆會符合情況下還是保留預設會比較安全。

2022年10月13日 星期四

HTML Page Convert to PDF

產製PDF在拉版時往往相對耗時,尤其是在有多頁的情況下相對搞工。測出來HTML FILE直轉PDF效果還不賴,做個備忘。

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.io.font.FontProgram;
import com.itextpdf.io.font.FontProgramFactory;

public void ConvertPDF(String htmlPath ) {
String src = htmlPath;
try {
ConverterProperties properties = new ConverterProperties();
DefaultFontProvider fontProvider = new DefaultFontProvider();
FontProgram fontProgram;
try {
fontProgram = FontProgramFactory.createFont("c:\\windows\\fonts\\kaiu.TTF");
fontProvider.addFont(fontProgram);
properties.setFontProvider(fontProvider);
} catch (IOException e) {
System.out.println("creat base font erro:" + e );
}

HtmlConverter.convertToPdf(new File(src), new File(htmlPath.replace(".html", ".pdf")), properties);
} catch (Exception ex) {
System.out.println(ex);
}
} 

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>html2pdf</artifactId>
    <version>4.0.3</version>
</dependency>

後記:
2022/12/12 使用者反映轉出來的PDF有文字被裁切的問題,檢視後發現Bootstrap的CSS套用上拋了許多Exception出來,看來是HTML套版改用Bootstrap造成的問題,解決方式更新為 V4.0.4 後再檢視PDF成果已無被裁切之情事,結案。