Related Posts Plugin for WordPress, Blogger...

[分享]透過 ActiveX 與 SWT 讓 Java 控制 BarTender 列印標籤

BarTender 標籤列印軟體要讓 Java 透過標籤印表機(Lable Printer)列印標籤,一般會用 javax.comm 或者 RXTX 對 COM Port 送 PCL 語法來完成,簡單的文字排版加條碼(BarCode)用這種方式到還好,要是複雜的排版或者有圖片、Logo 這種非文字的圖形列印需求,那光串 PCL 這種跟機械語言差不多的語法就絕對足以讓人抓狂,圖型列印品質說也奇怪的就是會變差,甚至是根本串不出來,最近剛好有這需求,所以就聽印表機原廠建議,使用 BarTender 這套標籤排版列印軟體。

很神奇的網路上幾乎找不到 Java BarTender 有關的訊息,找了其他的標籤列印方案,才驚覺 Java 這方面的應用怎麼這麼貧瘠,明明有很多的系統都是 Java base 的,難不成標籤列印這塊都沒整合?最後求助 BarTender 原廠 Seagull Scientific,他們提供了一份 Sample Code ftp://ftp.seagullscientific.com/TechSupport/ActiveX/Java/BtAutoJavaEx.zip,結果竟然是 J# 版本 …,參考其他 Java 呼叫 ActiveX 的方式,最後用 SWT 成功的呼叫了 BarTender 的 ActiveX 達到了列印的目標。

首先要執行的列印工作的電腦必須安裝 BarTender,而且至少要自動化版(Automation),Seagull Scientific 官方網站可以取得全功能的三十天試用版。

第二個要件是 SWT Library,可到 http://eclipse.org/swt/ 取得,SWT 有分 32bit 跟 64bit,這視 JRE 安裝版本來決定。

第三部分是 JBarTenderPrinter Library,這部份就是筆者自行用 SWT 的方式呼叫 BarTender 的 ActiveX,因為 BarTender 的 ActiveX 功能受限了,無法像官方 .NET SDK 功能完善,對於一些例外也無法掌控,所以這邊就不推了,提供基本功能的 jar Library 供非商業性質使用。

這邊做個簡單的 Sample,開啟 eclipse 建立一個 Java Project,加入 swt.jat 以及 JBarTenderPrinter.jar 兩個 Library,最後建立一個 Class 名為 Sample 並包含 main method。
JBarTenderPrinter.jar

Sample Class Code 如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;

import com.jaips.com.JBarTenderPrinter.Application;

public class Sample {

    public static void main(String[] args) {
        boolean rc = false;
        Shell shell = new Shell();
        Application app = new Application(shell, SWT.NONE);
        try {   
            rc = app.openFile("./lable/L1.btw");
            if (!rc) {
                app.quitApp();
                return;
            }
            app.setNameValue("PROD_NAME", "超真空保溫瓶");
            app.setNameValue("PRICE", "NTD$999");
            app.setNameValue("BARCODE", "90328475937");
            app.printLabel(false, false);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            app.quitApp();
            shell.close();
            shell.dispose();
            app = null;
            shell = null;
        }
    }
}

接者打開 BarTender 建立一張簡單的標籤,這裡做一張兩個文字一個條碼的標籤。
image

設定動態傳入值,1. 滑鼠雙擊欲動態傳入值的欄位、2. 彈出文字物件視窗後選資料來源、3. 按 [進階] 按鈕切換模式、4. 共用/名稱 部分輸入變數名稱(自行命名需跟程式裡相同)。
未命名

於 BarTender 設定的變數名稱在程式裡用 setNameValue Method 填入(19~21 行部分)
未命名2

執行程式結果(這裡用 XPS 代替印表機,故條碼無法列印。)
image

3 則留言 :

  1. 您好:
    關於內文中的JBarTenderPrinter Library(http://ee.jaips.com/file/JBarTenderPrinter.jar)似乎是舊網域名稱, 目前連結已失效, 不知能否提供有效連結, 以造福其他網友, 謝謝

    回覆刪除
  2. 已修復,不過強烈建議參考 BarTender 標籤列印跨平台整合 使用 Commander 的方式,效能、錯誤處理 ... 都好得多,Java 寫文字檔也很容易。

    回覆刪除
  3. 感謝您的提供, 目前案子是以JSP執行, 利用文字檔當資料庫, 由於列印環境在工廠裡, 為避免人員誤操作, 所以需要client端的daemon執行列印, 取代Commander的效果

    回覆刪除