1. 概述
Java 後台定義定時列印的功能,同時又需要直接呼叫報表的列印的時候,由於印表機型號和紙張的不同,需要指定印表機,進而列印是否成功並設定回傳值,下面詳細介紹實現程式。
2. 原理
2.1 定義報表運作環境
// 首先需要定義執行所在的環境,這樣才能正確讀取資料庫資訊
// 定義報表運作環境,用於執行報表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StateServerActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator());
String envpath;//工程路徑
envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";
SimpleWork.checkIn(envpath);
module.start();
注:工程路徑根據實際情況修改
2.2 定義執行範本工作薄
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("GettingStarted.cpt");
2.3 獲取報表參數並設定值
// 參數傳值
Parameter[] parameters = workbook.getParameters();
HashMap<String, String> paraMap = new HashMap<String, String>();
paraMap.put(parameters[0].getName(), "華北");
2.4 Java 中呼叫報表列印方法並進行判斷
透過公式 PrintUtils.printWorkBook(cptPath) 進行列印,此時不彈出列印視窗。
若需顯示列印選項對話框,則使用 PrintUtils.printWorkBook(cptPath, true),其中參數 true 為顯示列印選項對話框,如下所示:
// Java 中呼叫報表列印方法
boolean a = PrintUtils.printWorkBook("GettingStarted.cpt", paraMap, true);
if (!a) {
System.out.println("失敗啦!傳回" + a);
} else {
System.out.println("成功!傳回" + a);
}
其中 printWorkBook() 回傳值為 boolean 型,可透過回傳值 true(列印成功)和 false(列印失敗)來判斷列印是否成功。
3. 完整程式碼
編譯前,需要先匯入 FineReport 工程 JAR 包,包括安裝工程包%FR_HOME%/lib下面的所有的包,%FR_HOME%/server/lib下面的所有包,%FR_HOME%/webapps/webroot/WEB-INF/lib下面的所有包,還需要引入 JDK 下 的 tools.jar。如何操作可參考:編譯Java程式
注:工程路徑需要根據實際情況修改
package com.fr.io;
import com.fr.base.Parameter;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.report.RestrictionActivator;
import com.fr.main.TemplateWorkBook;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.print.PrintUtils;
import com.fr.report.ReportActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork;
import java.util.HashMap;
public class JavaPrint {
public static void main(String[] args) {
// 首先需要定義執行所在的環境,這樣才能正確讀取資料庫資訊
// 定義報表運作環境,用於執行報表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StateServiceActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator());
String envpath;//工程路徑
envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";
SimpleWork.checkIn(envpath);
module.start();
try {
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook("GettingStarted.cpt");
// 參數傳值
Parameter[] parameters = workbook.getParameters();
HashMap<String, String> paraMap = new HashMap<String, String>();
paraMap.put(parameters[0].getName(), "華北");
// java中呼叫報表列印方法
boolean a = PrintUtils.printWorkBook("GettingStarted.cpt", paraMap, true);
if (!a) {
System.out.println("失敗啦!傳回" + a);
} else {
System.out.println("成功!傳回" + a);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
module.stop();
}
}
}
編譯進行列印。
編譯該程式,彈出印表機設定視窗,選擇印表機就可以進行列印了,並在後台傳回結果:成功!傳回 true。
4. 行動端
行動端不支援各種列印和匯出方式